2015-06-14 24 views
6

Ich habe ein Array wie dieseMehrwert für jedes Element in Array Python

a= np.arange(4).reshape(2,2) 

array([[0, 1],[2, 3]]) 

ich Wert auf jedes Element in dem Array hinzufügen möchten. Ich möchte mein Ergebnis Rückkehr 4-Array wie

array([[1, 1],[2, 3]]) 

array([[0, 2],[2, 3]]) 

array([[0, 1],[3, 3]]) 

array([[0, 1],[2, 4]]) 

Antwort

5
[a + i.reshape(2, 2) for i in np.identity(4)] 
1

a als Eingangs Array Unter der Annahme, in die Werte hinzugefügt werden sollen und val ist der skalare Wert hinzugefügt werden, können Sie einen Ansatz verwenden, der für jede funktioniert mehrdimensionales Array a mit broadcasting und . Hier ist die Umsetzung -

shp = a.shape # Get shape 

# Get an array of 1-higher dimension than that of 'a' with vals placed at each 
# "incrementing" index along the entire length(.size) of a and add to a 
out = a + val*np.identity(a.size).reshape(np.append(-1,shp)) 

Probelauf -

In [437]: a 
Out[437]: 
array([[[8, 1], 
     [0, 5]], 

     [[3, 2], 
     [5, 1]]]) 

In [438]: val 
Out[438]: 20 

In [439]: out 
Out[439]: 
array([[[[ 28., 1.], 
     [ 0., 5.]], 
     [[ 3., 2.], 
     [ 5., 1.]]], 

     [[[ 8., 21.], 
     [ 0., 5.]], 
     [[ 3., 2.], 
     [ 5., 1.]]], 

     [[[ 8., 1.], 
     [ 20., 5.]], 
     [[ 3., 2.], 
     [ 5., 1.]]], 

     [[[ 8., 1.], 
     [ 0., 25.]], 
     [[ 3., 2.], 
     [ 5., 1.]]], 

     [[[ 8., 1.], 
     [ 0., 5.]], 
     [[ 23., 2.], 
     [ 5., 1.]]], .... 

Wenn Sie separate Arrays von out zu erstellen, können Sie einen zusätzlichen Schritt verwenden: np.array_split(out,a.size). Aus Gründen der Effizienz würde ich jedoch raten, die Indexierung zu verwenden, um auf alle Submatrizen wie out[0] (für die erste Untermatrix), out[1] (für die zweite Untermatrix) und so weiter zuzugreifen.

Verwandte Themen