PythonNumpy中数据的常⽤保存与读取⽅法
在经常性读取⼤量的数值⽂件时(⽐如深度学习训练数据),可以考虑现将数据存储为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 ,numpy库需要安装吗
-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=',')
总结
到此这篇关于Python Numpy中数据的常⽤保存与读取⽅法的⽂章就介绍到这了,更多相关python numpy 数据保存读取内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!