2017-05-03 3 views
3

Ich habe ein Problem mit der Ausführung einer bestimmten Operation auf einem n-dimensionalen Array. In dem spezifischen habe ich ein Array, deren Dimension 5:Ausführung in einer bestimmten Dimension eines Arrays

In [223]: data.ndim 
Out[223]: 5 

und mit einer Form gleich:

In [224]: shape(data) 
Out[224]: (6, 26, 27, 6, 50) 

Was ich möchte, ist wissen, ob es möglich ist, eine Operation auf dem auszuführen letzte Dimension für alle anderen Dimensionen (zum Beispiel max(data[0,0,0,0,:])), aber ohne Verwendung einer for-Schleife.

Ich hoffe, ich war klar genug! Danke für die Hilfe

Antwort

6

out[i,j,k,l] = max(data[i,j,k,l,:]) kann als einer der folgenden

out = np.max(data, axis=-1) 
out = np.max(data, axis=4) 

Oft geschrieben werden, es ist nützlich, wenn die Dimensionen zu halten, da out2[i,j,k,l,0] = max(data[i,j,k,l,:]). Sie können dies tun, indem man:

out2 = np.max(data, axis=-1, keepdims=True) 

So out2.shape == (6, 26, 27, 6, 1) - das ist praktisch, weil es jetzt richtig gegen den Eingang sendet.

Für weitere Informationen, werfen Sie einen Blick auf die Argumente für ufunc.reduce, die sum und max sind beide dünne Wrapper um

+0

Dank! Ich kannte die Achsenfunktion, aber was ich nicht verstehe, ist, wie ich andere Operationen ausführen kann. Zum Beispiel möchte ich jetzt meine Daten normalisieren (immer noch von der fünften Dimension sprechend), indem ich für das Maximum, das ich gerade gefunden habe, dividiere, ist das ohne irgendwelche for-Schleifen möglich? – gian9

+0

Das wäre 'data/np.max (Daten, Achse = -1, keepdims = True)' – Eric

2

Die meisten Funktionen in numpy nehmen ein axis Stichwort Argument für diesen Zweck:

data.max(axis=4) 

Dies wird die maximale über die 5. Achse finden (sie beginnen bei 0). Das Ergebnis wird die Form (6, 26, 27, 6) haben.

Verwandte Themen