Python numpy不保存数组()

时间:2014-08-28 15:36:33

标签: python-2.7 numpy save

在尝试(二进制)保存python 2中的某些数组时,我遇到了一个奇怪的错误 我已经隔离了错误,特别是假设

p1 = [1, 5, 10, 20]
p2 = [1, 5, 10, 20, 30]    
p3 =np.zeros( (5,10), dtype=float)

然后

np.save("foo1", (p1, p2))
np.save("foo2", (p1, p3))

工作正常,但

np.save("foo3", (p2, p3))

返回错误 enter image description here

任何想法发生了什么? 该错误表示"设置一个带有序列的数组元素" 试图环顾四周,转换数组等等但无济于事。 有趣的是,如上所述,第一次保存是可以的,而p1与p2非常相似......

1 个答案:

答案 0 :(得分:4)

错误不是由于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)

不确定这是否有资格作为错误,但是在p2p3的第一个维度相同的情况下,绊倒numpy的事实是5,在您的情况下。所以numpy认为它应该创建一个形状arr的数组(2, 5, ...)。然后,它会将p2中的值分配给arr[0, :],没有任何问题。但是当它尝试将p3中的值分配给arr[1, :]时,错误发生时:您正试图坚持一个位置,例如arr[1, 0]p3[0, :]中的5个元素。

Numpy可能对此更聪明,并且不假设匹配维度意味着所有序列的深度都是相同的,就像它似乎正在做的那样。您可能想要ping numpy邮件列表以查看其中一个开发人员是否对这是不良行为或设计选择有更明智的意见。