我有5个numpy数组a,b,c,d,e所有都定义为:array([1, 2, 3, 4, 5, 6, 7, 8, 9])我这样保存这些数组:np.savez_compressed('tmp/test',a=a,b=b,c=c,d=d,e=e)这将导致文件test.npz被创建。但是我在尝试加载数据时遇到了问题(下面的示例在这里):>>> f=np.load('tmp/test.npz')>>> f.files['a', 'c', 'b', 'e', 'd']>>> f['a']给出大量的错误,结尾为:File "C:\Python27\lib\compiler\transformer.py", line 754, in atom_lbracereturn self.com_dictorsetmaker(nodelist[1])File "C:\Python27\lib\compiler\transformer.py", line 1214, in com_dictorsetmakerassert nodelist[0] == symbol.dictorsetmakerAssertionError我已经考虑使用pickle代替。但是,这导致文件大小是.npz文件的四倍,因此我想使用savez或savez_compressed。有谁知道我在做什么错,或者有其他方法的建议?这是一个会产生错误的脚本:def saver(): import numpy as np a= np.arange(1,10) b=a c=a d=a e=a np.savez_compressed('tmp/test',a=a,b=b,c=c,d=d,e=e) f=np.load('tmp/test.npz') print f.files print f['a']
3 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
在Linux或Mac上都无法重现您的问题(Python 2.7,numpy 1.6.1 / 1.7.1)
但是,我注意到您使用相对路径来保存file tmp/test.npz。那是故意的吗?在我的回忆中,Windows的新版本对尝试在某些目录(例如“ / Program Files /”)中创建的新文件进行了特殊处理-它会将它们移开,但在某些情况下仍会告诉应用程序它们在那里。在这里似乎不太可能出现这种情况,但是您可以为要保存的文件尝试绝对路径吗?
顺便说一句:作为ZIP归档文件(savez savez_compressed创建文件)的替代方法,您可以尝试将“ LZMAFile”作为文件对象的泡菜。它提供了很好的压缩率(但是可能很慢,并且在压缩/保存文件时需要更多的内存和时间);
它用作任何其他文件对象包装器,类似的东西(用于加载腌制的数据):
from lzma import LZMAFile
import cPickle as pickle
if fileName.endswith('.xz'):
dataFile = LZMAFile(fileName,'r')
else:
dataFile = file(fileName, 'ro')
data = pickle.load(dataFile)
添加回答
举报
0/150
提交
取消