2017-01-23 5 views
5

Wenn wir eine numpy Array wie:Wie wird ein einzelnes Element des multidimensionalen Numpy Array mit einem anderen Numpy Array gesetzt?

Array = np.zeros((2, 10, 10)) 

und wollen wir ein Element davon setzen, von einem anderen

gegeben
indexes = np.array([0,0,0]) 

Wie können wir das tun?

Array[indexes] = 5 

wird jedes Element der ersten Dimension des Arrays bis 5

+0

Sie können auch eine Liste (nicht als numpy.array) verwenden: 'Array [0, 0, 0] = 5' nur gesetzt, die erste Null bis 5. – Lucas

Antwort

7

Mit a als Datenarray Setzen und idx als die Anordnung von Indizes, so dass jede Zeile eines Element entspricht, in den Daten festgelegt werden Array, könnten Sie tun -

a[tuple(idx.T)] = 5 

Probelauf -

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]]]) 
Alternativ

, könnten wir die lineare Indizes mit np.ravel_multi_index berechnen und führen Sie dann die Zuordnung mit np.put, wie so -

np.put(a,np.ravel_multi_index(idx.T,a.shape),5) 

Wenn Sie mit dreidimensionalen Feldern zu tun hat, konnten wir die dreidimensionale Indizes in Scheiben schneiden und zuordnen haben eine andere Methode, wie so -

a[idx[:,0],idx[:,1],idx[:,2]] = 5 

Wenn es nur ein Element ist erforderlich eingestellt werden, gerade tun -

a[tuple(idx)] = 5 

Probelauf -

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]]]) 
+0

Dank Das war sehr hilfreich! Ich habe nur vergessen zu kommentieren, nachdem ich dein Beispiel durchgearbeitet und angewendet habe, was ein paar Tage dauerte. Trotzdem danke! – Fosa

Verwandte Themen