需要了解两个函数名: tofile 和 fromfile 两个函数。tofile输出的数据没有格式,因此用numpy.fromfile读回来的时候需要自己格式化数据。
a = np.arange(0,12)
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a.shape=3,4
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a.tofile("a.bin")
>>> b=np.fromfile("a.bin",dtype=np.float)
>>> b
array([2.12199579e-314, 6.36598737e-314, 1.06099790e-313, 1.48539705e-313,
1.90979621e-313, 2.33419537e-313])
>>> a.dtype
dtype('int32')
>>> b=np.fromfile("a.bin",dtype=np.int32)
>>> b
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> b.shape=3,4
>>> b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
numpy.load和numpy.save函数以NumPy专用的二进制类型保存数据,这两个函数会自动处理元素类型和shape等信息,使用它们读写数组就方便多了,但是numpy.save输出的文件很难和其它语言编写的程序读入:
>>> np.save("a.npy",a)
>>> c=np.load("a.npy")
>>> c
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
文件名和文件对象:
>>> a=np.arange(8)
>>> b=np.add.accumulate(a)
>>> c=a+b
>>> c
array([ 0, 2, 5, 9, 14, 20, 27, 35])
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> b
array([ 0, 1, 3, 6, 10, 15, 21, 28], dtype=int32)
>>> f=file("result.npy","wb")
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
f=file("result.npy","wb")
NameError: name 'file' is not defined
>>> f=open("result.npy","wb")
>>> np.save(f,a)
>>> np.save(f,b)
>>> np.save(f,c)
>>> f.close()
>>> f=open("result.npy","rb")
>>> np.load(f)
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> np.load(f)
array([ 0, 1, 3, 6, 10, 15, 21, 28])
>>> np.load(f)
array([ 0, 2, 5, 9, 14, 20, 27, 35])
参考:numpy 快速处理数据