加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – nump.load跟随numpy.savez的断言错误

发布时间:2020-12-20 13:35:12 所属栏目:Python 来源:网络整理
导读:我有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
我有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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读