Python Numpy不保存数组()

ntg*_*ntg 3 numpy save python-2.7

尝试(二进制)在python 2中保存一些数组时出现奇怪的错误,我隔离了该错误,尤其是假设

p1 = [1, 5, 10, 20]
p2 = [1, 5, 10, 20, 30]    
p3 =np.zeros( (5,10), dtype=float)
Run Code Online (Sandbox Code Playgroud)

然后

np.save("foo1", (p1, p2))
np.save("foo2", (p1, p3))
Run Code Online (Sandbox Code Playgroud)

可以,但是

np.save("foo3", (p2, p3))
Run Code Online (Sandbox Code Playgroud)

返回错误 在此处输入图片说明

有什么想法吗?错误显示“使用序列设置数组元素”尝试环顾四周,转换数组等操作,但无济于事。有趣的是,如前所述,第一次保存是可以的,并且p1与p2非常相似...

Jai*_*ime 5

该错误不是由于引起的np.save,而是由于尝试从嵌套序列创建数组而引起的。我收到类似但不同的错误,可能是因为我正在使用以下任何变体来开发版本np.array

>>> np.array((p2, p3))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (5,10) into shape (5)
Run Code Online (Sandbox Code Playgroud)

不知道这是否有资格作为一个bug,但什么是跳闸numpy的是,第一维p2p3你的情况一样,5。因此numpy认为它应该创建一个arrshape 数组(2, 5, ...)。然后,它在分配值p2arr[0, :],没有任何问题。但是,当它试图在指定值p3arr[1, :]是当错误发生:您要粘成一个单一的位置,例如arr[1, 0],在5个元素p3[0, :]

Numpy对此可能会更聪明,并且不假设匹配的维数意味着所有序列的深度都相同,就像看起来那样。您可能希望对numpy邮件列表进行ping操作,以查看其中一位开发人员是否对这是不良行为还是设计选择有更全面的了解。

  • 感谢您的回答。这可能会导致只很少发生的错误。。。保存多个数组以确保没有问题时,可能值得添加一个空数组,例如np.save(“ foo4”,(“ data_for_foo”,p2 ,p3)) (2认同)