为什么np.load()无法在pickle文件中读取我的ndarray数据?

时间:2016-07-13 03:30:55

标签: python numpy pickle

我正在尝试分析张量数据,但是我无法使用np.load()读取拾取文件中的数据。我的python代码如下:

import pickle
import numpy as np
import sktensor as skt
import numpy.random as rn

data = np.ones((10, 8, 3), dtype='int32')  # 3-mode count tensor of size 10 x 8 x 3
##data = skt.dtensor(data)

with open('data.dat', 'w+') as f:    # can be stored as a .dat using pickle 
    pickle.dump(data, f)

with open('data.dat', 'r+') as f:  # can be loaded back in using pickle.load
    tmp = pickle.load(f)
    assert np.allclose(tmp, data)

但是当我尝试使用np.load()加载data.bat中的数据时,如下所示:

np.load('G:\data.dat')

某些错误显示为“

Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    np.load('D:/GDELT_Tensor/data.dat', mmap_mode = 'r')
  File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 416, in load
    "Failed to interpret file %s as a pickle" % repr(file))
IOError: Failed to interpret file 'D:/data.dat' as a pickle.

任何人都可以帮助我?

1 个答案:

答案 0 :(得分:0)

不要使用pickle模块来保存NumPy数组。相反,请使用以下方法之一:the standard

甚至有人在引擎盖下使用泡菜,例如:

np.save('data.dat', data)
tmp = np.load('data.dat')

CSV或HDF5等另一种格式可能更适合大多数应用程序 - 尤其是在您可能希望与非Python系统进行互操作的情况下。