如果我們有一個numpy的陣列,如:如何使用另一個Numpy數組設置多維Numpy數組的單個元素?
Array = np.zeros((2, 10, 10))
,我們要設置另一個
indexes = np.array([0,0,0])
我們如何能做到這一點給它的一個元素,?
Array[indexes] = 5
被陣列的第一維度的每一個元素設置爲5
如果我們有一個numpy的陣列,如:如何使用另一個Numpy數組設置多維Numpy數組的單個元素?
Array = np.zeros((2, 10, 10))
,我們要設置另一個
indexes = np.array([0,0,0])
我們如何能做到這一點給它的一個元素,?
Array[indexes] = 5
被陣列的第一維度的每一個元素設置爲5
隨着a
作爲數據陣列和idx
作爲索引的陣列,使得每行對應於一個元件中的數據被設置數組,你可以這樣做 -
a[tuple(idx.T)] = 5
採樣運行 -
In [94]: a = np.zeros((2,2,3),dtype=int)
In [95]: idx = np.array([[0,0,0],[1,1,0],[0,1,2]])
In [96]: a[tuple(idx.T)] = 5
In [97]: a
Out[97]:
array([[[5, 0, 0],
[0, 0, 5]],
[[0, 0, 0],
[5, 0, 0]]])
In [98]: a[tuple(idx.T)] = [5,10,15] # or set different values
In [99]: a
Out[99]:
array([[[ 5, 0, 0],
[ 0, 0, 15]],
[[ 0, 0, 0],
[10, 0, 0]]])
另外,我們可以計算線性指數與np.ravel_multi_index
,然後用np.put
進行分配,像這樣 -
np.put(a,np.ravel_multi_index(idx.T,a.shape),5)
如果你正在處理的三維陣列,我們可以切片三維指標,並分配給有另一種方法,就像這樣 -
a[idx[:,0],idx[:,1],idx[:,2]] = 5
如果它只是一個元素需要設置,只是做 -
a[tuple(idx)] = 5
樣品運行 -
In [118]: a = np.zeros((2,2,3),dtype=int)
In [119]: idx = np.array([0,0,0])
In [120]: a[tuple(idx)] = 5
In [121]: a
Out[121]:
array([[[5, 0, 0],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 0]]])
由於這非常有幫助!在完成您的示例並應用它之後,我只是忘記發表評論,這需要花費幾天時間。無論如何謝謝你! – Fosa
也可以使用一個列表(而不是作爲numpy.array):'陣列[0,0,0] = 5'只設置第一零至5 – Lucas