2013-07-17 53 views
2

我想要做一個分配給一個多維數組,其中數組的每個元素是3個短整型:的Python:指定列表多維數組元素

a = ndarray([3,3,3], dtype='u2,u2,u2') 
a[2,2,2] = [1,2,3] 

Traceback (most recent call last): File "", line 1, in a[2,2,2] = [1,2,3] TypeError: expected a readable buffer object

我將使用大數組,並希望直接對數組進行索引以獲得性能。在Python中做這件事的好方法是什麼?

感謝您瞭解如何做到這一點?

回答

1

dtype='u2,u2,u2'數組的元素是一個元組三個短褲,而不是一個列表三個短褲。所以:

a[2,2,2] = (1,2,3) 

(在括號當然是沒有必要的,但我用它們來使它明顯這是一個元組。)

你也可以通過它的array,如果你想:

a[2,2,2] = np.array([1,2,3]) 

當然,這裏的錯誤信息當然可能會更好......它實際上抱怨的是比你期望的更深的東西,它並沒有幫助你調試問題。

+0

感謝您的評論。這有幫助。如果我得到一個列表作爲函數中的參數,我是否必須將它轉換爲一個元組來執行數組賦值?將3個數值座標作爲函數參數賦值給數組元素的最有效方法是什麼?謝謝 – user2253054

+0

我不確定調用'a [x,y,z] = tuple(foo)'是比a [x,y,z] = np.array(foo)更快還是更慢';如果它很重要,請測試它。但我懷疑這是否重要。如果它很重要,那可能是因爲你正在做一個大循環 - 在這種情況下,你使用Python循環而不是矢量化是你需要解決的真正問題。 – abarnert