为了账号安全,请及时绑定邮箱和手机立即绑定

numpy.savez之后出现np.load的断言错误

numpy.savez之后出现np.load的断言错误

Qyouu 2021-03-29 21:09:04
我有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)


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 727 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信