2014-08-28 33 views
3

我越來越想(二進制)保存在Python 2 某些陣列我已分離出錯誤時,一個奇怪的錯誤,特別是假設的Python NumPy的不節能陣列()

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

任何想法發生了什麼? 錯誤說「使用序列設置數組元素」 嘗試環顧四周,轉換數組等等,但無濟於事。 什麼是有趣的是,作爲中提到的第一個省都OK,和P1是非常相似的P2 ...

回答

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) 

不知道這是否有資格作爲一個bug,但什麼是跳閘numpy的是事實,第一維p2p3是一樣的,5在你的情況。所以numpy認爲它應該創建一個形狀爲(2, 5, ...)的數組arr。然後它將p2中的值分配給arr[0, :]而沒有任何問題。但是,當它試圖將p3中的值分配給arr[1, :]時,就是發生錯誤時:您正在嘗試將其鎖定到單個位置,例如, arr[1, 0]p3[0, :]中的5個元素。

Numpy可能會對此更聰明,並且不會認爲匹配維度意味着所有序列的深度都是相同的,因爲它似乎在做。您可能想要查看numpy郵件列表,看看其中一位開發人員是否對這是否是不良行爲或設計選擇有更明智的看法。

+2

Thanx的答案。這可能會導致一個只發生很少的錯誤......當保存多個數組時,可能需要添加一個空數組以確保沒有任何錯誤,那麼,例如, np.save(「foo4」,(「data_for_foo」,p2,p3)) – ntg 2014-08-29 17:46:30