python – nump.load跟随numpy.savez的断言错误
我有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:Python27libcompilertransformer.py",line 754,in atom_lbrace return self.com_dictorsetmaker(nodelist[1]) File "C:Python27libcompilertransformer.py",line 1214,in com_dictorsetmaker assert nodelist[0] == symbol.dictorsetmaker AssertionError 我考虑过使用泡菜.但是这会导致文件大小是.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',e=e) f=np.load('tmp/test.npz') print f.files print f['a'] 这是完整的追溯: Traceback (most recent call last): File "<pyshell#16>",line 1,in <module> saver.saver() File "C:Python27saver.py",line 14,in saver print f['a'] File "C:Python27libsite-packagesnumpylibnpyio.py",line 241,in __getitem__ return format.read_array(value) File "C:Python27libsite-packagesnumpylibformat.py",line 440,in read_array shape,fortran_order,dtype = read_array_header_1_0(fp) File "C:Python27libsite-packagesnumpylibformat.py",line 336,in read_array_header_1_0 d = safe_eval(header) File "C:Python27libsite-packagesnumpylibutils.py",line 1156,in safe_eval ast = compiler.parse(source,mode="eval") File "C:Python27libcompilertransformer.py",line 53,in parse return Transformer().parseexpr(buf) File "C:Python27libcompilertransformer.py",line 132,in parseexpr return self.transform(parser.expr(text)) File "C:Python27libcompilertransformer.py",line 124,in transform return self.compile_node(tree) File "C:Python27libcompilertransformer.py",line 159,in compile_node return self.eval_input(node[1:]) File "C:Python27libcompilertransformer.py",line 194,in eval_input return Expression(self.com_node(nodelist[0])) File "C:Python27libcompilertransformer.py",line 805,in com_node return self._dispatch[node[0]](node[1:]) File "C:Python27libcompilertransformer.py",line 578,in testlist return self.com_binary(Tuple,nodelist) File "C:Python27libcompilertransformer.py",line 1082,in com_binary return self.lookup_node(n)(n[1:]) File "C:Python27libcompilertransformer.py",line 596,in test then = self.com_node(nodelist[0]) File "C:Python27libcompilertransformer.py",line 610,in or_test return self.com_binary(Or,line 615,in and_test return self.com_binary(And,line 619,in not_test result = self.com_node(nodelist[-1]) File "C:Python27libcompilertransformer.py",line 626,in comparison node = self.com_node(nodelist[0]) File "C:Python27libcompilertransformer.py",line 659,in expr return self.com_binary(Bitor,line 663,in xor_expr return self.com_binary(Bitxor,line 667,in and_expr return self.com_binary(Bitand,line 671,in shift_expr node = self.com_node(nodelist[0]) File "C:Python27libcompilertransformer.py",line 683,in arith_expr node = self.com_node(nodelist[0]) File "C:Python27libcompilertransformer.py",line 695,in term node = self.com_node(nodelist[0]) File "C:Python27libcompilertransformer.py",line 715,in factor node = self.lookup_node(nodelist[-1])(nodelist[-1][1:]) File "C:Python27libcompilertransformer.py",line 727,in power node = self.com_node(nodelist[0]) File "C:Python27libcompilertransformer.py",line 739,in atom return self._atom_dispatch[nodelist[0][0]](nodelist) File "C:Python27libcompilertransformer.py",in atom_lbrace return self.com_dictorsetmaker(nodelist[1]) File "C:Python27libcompilertransformer.py",in com_dictorsetmaker assert nodelist[0] == symbol.dictorsetmaker AssertionError 解决方法
无法在Linux或Mac上重现您的问题(Python 2.7,numpy 1.6.1 / 1.7.1)
但是,我注意到你使用相对路径来保存文件tmp / test.npz.这是故意的吗?在我的回忆中,最新版本的Windows对试图在某些目录中创建的新文件应用程序(如’/ Program Files /’)有一些特殊处理 – 它会将它们移开但仍然告诉应用程序它们在某些情况下存在.这似乎不太可能是这种情况,但你可以尝试保存文件的绝对路径吗? 顺便说一句:作为ZIP-archive(savez savez_compressed创建)的替代方法,您可以使用’LZMAFile’作为文件对象来尝试pickle.它提供了非常好的压缩率(但它可能很慢,并且在压缩/保存文件时需要更多的内存和时间); 它被用作任何其他文件对象包装器,类似于(加载pickle数据): 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |