使用Pi保存Numpy数组

2024-10-05 14:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Numpy数组,我想用Pickle保存(130000 x 3),代码如下。但是,在pkl.load行中,我一直得到错误“eoferor:run out of input”或“unsupportdoperation:read”。这是我第一次用泡菜,有什么想法吗?

谢谢

阿南特

import pickle as pkl
import numpy as np

arrayInput = np.zeros((1000,2)) #Trial input
save = True
load = True

filename = path + 'CNN_Input'
fileObject = open(fileName, 'wb')

if save:
    pkl.dump(arrayInput, fileObject)
    fileObject.close()

if load:
    fileObject2 = open(fileName, 'wb')
    modelInput = pkl.load(fileObject2)
    fileObject2.close()

if arrayInput == modelInput:
    Print(True)

Tags: importtrueinputifsaveasnpload
3条回答

已经有一点了,但是如果你发现了这个,Pickle会在很短的时间内完成。

with open('filename','wb') as f: pickle.dump(arrayname, f)

with open('filename','rb') as f: arrayname1 = pickle.load(f)

numpy.array_equal(arrayname,arrayname1) #sanity check

另一方面,默认情况下,numpy compress将我的5.2GB降到了.4GB,Pickle降到了1.7GB。

我使用pickle没有问题:

In [126]: arr = np.zeros((1000,2))
In [127]: with open('test.pkl','wb') as f:
     ...:     pickle.dump(arr, f)
     ...:     
In [128]: with open('test.pkl','rb') as f:
     ...:     x = pickle.load(f)
     ...:     print(x.shape)
     ...:     
     ...:     
(1000, 2)

picklenp.save/load有很深的互易性。就像我可以用np.load加载这个pickle一样:

In [129]: np.load('test.pkl').shape
Out[129]: (1000, 2)

如果我在错误的地方打开pickle文件,我会得到您的错误:

In [130]: with open('test.pkl','wb') as f:
     ...:     x = pickle.load(f)
     ...:     print(x.shape)
     ...:    
UnsupportedOperation: read

但这并不奇怪-你不能读取一个新打开的写文件。它将是空的。

np.save/load是编写numpy数组的常用对。但是pickle使用save序列化数组,而save使用pickle序列化(数组中的)非数组对象。结果文件大小相似。奇怪的是,泡菜的时间更快。

您应该使用numpy.savenumpy.load

相关问题 更多 >