Numpy中数据的常用的保存与读取方法
文章目录:
在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多.
下面就常用的保存数据到二进制文件和保存数据到文本文件进行介绍:
1.保存为二进制文件(.npy/.npz)
numpy.save
保存一个数组到一个二进制的文件中,保存格式是.npy
参数介绍
numpy.save(file, arr, allow_pickle=True, fix_imports=True)
file:文件名/文件路径
arr:要存储的数组
allow_pickle:布尔值,允许使用Python pickles保存对象数组(可选参数,默认即可)
fix_imports:为了方便Pyhton2中读取Python3保存的数据(可选参数,默认即可)
使用
- >>> import numpy as np
- #生成数据
- >>> x=np.arange(10)
- >>> x
- array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- #数据保存
- >>> np.save('save_x',x)
- #读取保存的数据
- >>> np.load('save_x.npy')
- array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy.savez
这个同样是保存数组到一个二进制的文件中,但是厉害的是,它可以保存多个数组到同一个文件中,保存格式是.npz
,它其实就是多个前面np.save的保存的npy
,再通过打包(未压缩)的方式把这些文件归到一个文件上,不行你去解压npz
文件就知道了,里面是就是自己保存的多个npy
.
参数介绍
numpy.savez(file, *args, **kwds)
file:文件名/文件路径
*args:要存储的数组,可以写多个,如果没有给数组指定Key,Numpy将默认从'arr_0','arr_1'的方式命名
kwds:(可选参数,默认即可)
使用
- >>> import numpy as np
- #生成数据
- >>> x=np.arange(10)
- >>> x
- array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- >>> y=np.sin(x)
- >>> y
- array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
- -0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])
- #数据保存
- >>> np.save('save_xy',x,y)
- #读取保存的数据
- >>> npzfile=np.load('save_xy.npz')
- >>> npzfile #是一个对象,无法读取
- <numpy.lib.npyio.NpzFile object at 0x7f63ce4c8860>
- #按照组数默认的key进行访问
- >>> npzfile['arr_0']
- array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- >>> npzfile['arr_1']
- array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
- -0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])
更加神奇的是,你可以不适用Numpy默认给数组的Key,而是自己给数组有意义的Key,这样就可以不用去猜测自己加载数据是否是自己需要的.
- #数据保存
- >>> np.savez('newsave_xy',x=x,y=y)
- #读取保存的数据
- >>> npzfile=np.load('newsave_xy.npz')
- #按照保存时设定组数key进行访问
- >>> npzfile['x']
- array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- >>> npzfile['y']
- array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ,
- -0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])
简直不能太爽,深度学习中,有时候你保存了训练集,验证集,测试集,还包括他们的标签,用这个方式存储起来,要啥加载啥,文件数量大大减少,也不会到处改文件名去.
numpy.savez_compressed
这个就是在前面numpy.savez的基础上加了压缩,前面我介绍时尤其注明numpy.savez是得到的文件打包,不压缩的.这个文件就是对文件进行打包时使用了压缩,可以理解为压缩前各npy
的文件大小不变,使用该函数比前面的numpy.savez得到的npz
文件更小.
注:函数所需参数和numpy.savez一致,用法完成一样.
2.保存到文本文件
numpy.savetxt
保存数组到文本文件上,可以直接打开查看文件里面的内容.
参数介绍
numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
fname:文件名/文件路径,如果文件后缀是
.gz
,文件将被自动保存为.gzip
格式,np.loadtxt可以识别该格式
X:要存储的1D或2D数组
fmt:控制数据存储的格式
delimiter:数据列之间的分隔符
newline:数据行之间的分隔符
header:文件头步写入的字符串
footer:文件底部写入的字符串
comments:文件头部或者尾部字符串的开头字符,默认是'#'
encoding:使用默认参数
使用
- >>> import numpy as np
- #生成数据
- >>> x = y = z = np.ones((2,3))
- >>> x
- array([[1., 1., 1.],
- [1., 1., 1.]])
- #保存数据
- np.savetxt('test.out', x)
- np.savetxt('test1.out', x,fmt='%1.4e')
- np.savetxt('test2.out', x, delimiter=',')
- np.savetxt('test3.out', x,newline='a')
- np.savetxt('test4.out', x,delimiter=',',newline='a')
- np.savetxt('test5.out', x,delimiter=',',header='abc')
- np.savetxt('test6.out', x,delimiter=',',footer='abc')
保存下来的文件都是友好的,可以直接打开看看有什么变化.
numpy.loadtxt
根据前面定制的保存格式,相应的加载数据的函数也得变化.
参数介绍
numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes')
fname:文件名/文件路径,如果文件后缀是
.gz
或.bz2
,文件将被解压,然后再载入
dtype:要读取的数据类型
comments:文件头部或者尾部字符串的开头字符,用于识别头部,尾部字符串
delimiter:划分读取上来值的字符串
converters:数据行之间的分隔符
.......后面不常用的就不写了
使用
- np.loadtxt('test.out')
- np.loadtxt('test2.out', delimiter=',')
参考资料:
官方API-Routines
Numpy中数据的常用的保存与读取方法的更多相关文章
- Python Numpy中数据的常用的保存与读取方法
在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...
- Numpy中数据的常用的保存与读取
保存到文本文件numpy.savetxt()numpy.loadtxt() import numpy as np x= np.arange(0,10,0.1) np.savetxt('save_x', ...
- JavaScript中,有三种常用的绑定事件的方法
要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的 ...
- Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- numpy中数据合并,stack ,concentrate,vstack,hstack
在python的numpy库中有一个函数np.stack(), 看过一些博文后觉得别人写的太复杂,然后自己有了一些理解之后做了一些比较简单的解释 np.stack 首先stack函数用于堆叠数组,其调 ...
- [转]numpy中数据合并,stack ,concentrate,vstack,hstack
转自:https://www.cnblogs.com/onemorepoint/p/9541761.html 在python的numpy库中有一个函数np.stack() np.stack 首先sta ...
- numpy中的一些常用的关键字用法
1.np.full() 原型:numpy.full(shape, fill_value, dtype=None, order='C') eg: 2.np.flatten():该函数返回一个折叠成一维的 ...
- Numpy数组的保存与读取方法
1. 数组以二进制格式保存 np.save和np.load是读写磁盘数组数据的两个主要函数.默认情况下,数组以未压缩的原始二进制格式保存在扩展名为npy的文件中,以数组a为例 np.save(&quo ...
- Matlab数据处理——数据的保存和读取方法操作
1:dlmwrite()函数保存成txt文件 使用方法: dlmwrite('filename', M) 使用默认分隔符“,”将矩阵M写入文本文件filename中: d ...
随机推荐
- C# 练习题 利用条件运算符的嵌套来完成分数等级划分
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示.1.程序分析:(a>b)?a:b这是条件运算符的基本例子. cla ...
- ASP.NETCore 3.0 Autofac替换及控制器属性注入及全局容器使用
1.Autofac基础使用 参考: https://www.cnblogs.com/li150dan/p/10071079.html 2.ASP.NETCore 3.0 Autofac 容器替换 需要 ...
- 用lambda表达式写分组查询的示例
需要完成的查询逻辑:查询A表中根据CertificateDelayApplyRecordId 分组,每条记录算8个课时,查询出每个CertificateDelayApplyRecordId已经学习了的 ...
- delegate、Action、Func的用法
委托的特点 委托类似于 C++ 函数指针,但它们是类型安全的. 委托允许将方法作为参数进行传递. 委托可用于定义回调方法. 委托可以链接在一起. delegate的用法 delegate void B ...
- 22、vue实现随机四位数验证码
效果图: 1.新建生成验证码的组件Sidentify.vue(代码如下): <template> <div class="s-canvas"> <ca ...
- jQuery(function(){})和$(function(){ }) 和 $(document).ready(function(){ })关系
转自:https://www.jianshu.com/p/3b0fe5d07996 $(function(){ })和jQuery(function(){ })都是 $(document).ready ...
- linux route路由
网关(Gateway)又称网间连接器.协议转换器.网关在网络层以上实现网络互连 就好像一个房间可以有多扇门一样,一台主机可以有多个网关.默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认 ...
- SDk编程基础
一.Android简介: 由Andy Rubin开发, 常用手机版本:谷哥:Nexus.华为:EMUI.魅族:Flyme Adnroid是运行在Java虚拟机(JVM)上大部分免费的开源的.应用通过权 ...
- 自制微擎AI面相识别算术阈值
有时在朋友圈或其他地方会看到一些AI面相的分享链接或小程序,不是面相算命的有多吸引人,而是前面有"AI"两个字母.于是我就上网找了一下相关代码,发现了一个微擎系统的面相模块.下载下 ...
- Springboot+事务
项目小 自己没有实际应用,但实际用起来不难. 参照 作者孙林峰的就可以了 http://blog.coocap.com/?p=610 其截图备份如下: