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

我有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_lbrace

return self.com_dictorsetmaker(nodelist[1])

File "C:\Python27\lib\compiler\transformer.py", line 1214, in com_dictorsetmaker

assert nodelist[0] == symbol.dictorsetmaker

AssertionError

我已经考虑使用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']


Qyouu
浏览 728回答 3
3回答

慕无忌1623718

在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 LZMAFileimport cPickle as pickleif fileName.endswith('.xz'):    dataFile = LZMAFile(fileName,'r')else:    dataFile = file(fileName, 'ro')     data = pickle.load(dataFile)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python