Numpy文件存取
Numpy能够读写磁盘上的文本数据或二进制数据。将数组以二进制格式保存到磁盘
np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。
>>> import numpy as np
A = np.arange(15).reshape(3,5)
>>> A
array([[ 0,1,2,3,4],
[ 5,6,7,8,9],
])
>>> np.save("A.npy",A) #如果文件路径末尾没有扩展名.npy,该扩展名会被自动加上。
>>> B=np.load("A.npy")
>>> B
array([[ 0,1,2,3,4],
[ 5,6,7,8,9],
])
注:保存为Numpy专用的二进制格式后,就不能用notepad++等打开看了(乱码)。因此这种方式建议在不需要看保存文件内容的情况下使用。
np.savez
如果你想将多个数组保存到一个文件中的话,可以使用numpy.savez函数。savez函数的第一个参数是文件名,其后的参数都是需要保存的数组,也可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为arr_0, arr_1, …。savez函数输出的是一个压缩文件(扩展名为npz),其中每个文件都是一个save函数保存的npy文件,文件名对应于数组名。load函数自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容:
>>> C=np.array()
>>> np.savez("files.npz",A,B,C_array=C)
>>> D=np.load("files.npz")
>>> D['arr_0']
array([[ 0,1,2,3,4],
[ 5,6,7,8,9],
])
>>> D['arr_1']
array([[ 0,1,2,3,4],
[ 5,6,7,8,9],
])
>>> D['arr_2']
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "D:\Python3\lib\site-packages\numpy\lib\npyio.py", line 255, in __getitem__
raise KeyError("%s is not a file in the archive" % key)
KeyError: 'arr_2 is not a file in the archive'
>>> D['C_array']
array()
如果你用解压软件打开files.npz文件的话,会发现其中有三个文件:arr_0.npy, arr_1.npy, C_array.npy,其中分别保存着数组A,B,C的内容。
存取文本文件
np.loadtxt和np.savetxt可以读写1维和2维的数组:
同时可以指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。
np.loadtxt(FILENAME, dtype=int, delimiter=' ')
np.savetxt("a.txt", a, fmt="%d", delimiter=",")
例子:
>>> a=np.arange(0,10).reshape(2,-1)
>>> a
array([,
])
>>> np.savetxt("a.txt",a) #缺省按照'%.18e'格式保存数据,以空格分隔
>>> np.loadtxt("a.txt")
array([[ 0.,1.,2.,3.,4.],
[ 5.,6.,7.,8.,9.]])
>>> a=np.arange(0,10,0.5).reshape(4,-1)
>>> a
array([[ 0. ,0.5,1. ,1.5,2. ],
[ 2.5,3. ,3.5,4. ,4.5],
[ 5. ,5.5,6. ,6.5,7. ],
[ 7.5,8. ,8.5,9. ,9.5]])
>>> np.savetxt("a.txt",a,fmt="%d",delimiter=",")#改为保存为整数,以逗号分隔
>>> np.loadtxt("a.txt",delimiter=",")#load时也要指定为逗号分隔
array([[ 0.,0.,1.,1.,2.],
[ 2.,3.,3.,4.,4.],
[ 5.,5.,6.,6.,7.],
[ 7.,8.,8.,9.,9.]])
---------------------
页:
[1]