Numpy能够读写磁盘上的文本数据或二进制数据。
1、npy文件——Numpy专用的二进制格式
np.load()和np.save()是读写磁盘数组数据的两个重要函数。
使用时,数组会以未压缩的原始二进制格式保存在扩展名为.npy的文件中。
import numpy as np
a = np.random.randint(0, 10, (3,), dtype='int')
print('save:', a)
np.save('test.npy', a)
b = np.load('test.npy')
print('read:', b)
#输出结果如下:
save: [0 1 2]
read: [0 1 2]
注:保存为Numpy专用的二进制格式后,就不能用notepad++等打开看了(乱码)。因此这种方式建议在不需要看保存文件内容的情况下使用。
2、npz文件——压缩文件
使用np.savez()函数可以将多个数组保存到同一个文件中。
np.savez()函数的第一个参数是文件名,其后的参数都是需要保存的数组。传递数组时可以使用关键字参数为数组命名,非关键字参数传递的数组会自动起名为arr_0、arr_1……
np.savez()函数输出的是一个扩展名为.npz的压缩文件,它包含多个与保存的数组对应的npy文件(由save()函数保存),文件名对应数组名。
读取.npz文件时使用np.load()函数,返回的是一个类似于字典的对象,因此可以通过数组名作为关键字对多个数组进行访问。
a = np.random.randint(0, 10, (3,), dtype='int')
b = np.random.randint(0, 10, (3,), dtype='int')
c = np.random.randint(0, 10, (3,), dtype='int')
print('save:', a, b, c)
np.savez('test.npz', a, b, c)
data = np.load('test.npz')
print(data.files)
aa = data[data.files[0]]
bb = data[data.files[1]]
cc = data[data.files[2]]
print('read:', aa, bb, cc)
#输出结果如下:
save: [1 2 1] [5 0 7] [6 6 7]
['arr_0', 'arr_1', 'arr_2']
read: [1 2 1] [5 0 7] [6 6 7]
如若想给保存的数组命名,而不是默认的“arr_0”、“arr_1”、“arr_2”...的话,只需修改np.savez中传递的参数即可。
import numpy as np
a = np.random.randint(0, 10, (3,), dtype='int')
b = np.random.randint(0, 10, (3,), dtype='int')
c = np.random.randint(0, 10, (3,), dtype='int')
print('save:', a, b, c)
np.savez('test.npz', a=a, b=b, c=c)
#np.savez('test.npz', a1111=a, b=b, c=c)
data = np.load('test.npz')
print(data.files)
aa = data[data.files[0]]
bb = data[data.files[1]]
cc = data[data.files[2]]
print('read:', aa, bb, cc)
#输出结果如下:
save: [0 9 5] [0 7 2] [0 4 0]
['a', 'b', 'c']
#['a1111', 'b', 'c']
read: [0 9 5] [0 7 2] [0 4 0]