Heim > Artikel > Backend-Entwicklung > Wie kann ich ein 2D-NumPy-Array in kleinere 2D-Arrays aufteilen?
2D-Arrays in kleinere 2D-Arrays in NumPy aufteilen
Beim Arbeiten mit Bildern oder anderen Daten, die als 2D-Arrays dargestellt werden, ist dies häufig erforderlich Schneiden Sie sie zur Verarbeitung oder Analyse in kleinere Arrays. In Numpy kann dies durch eine Kombination aus Reshape- und Swapaxes-Operationen erreicht werden.
Um den Ansatz zu verstehen, betrachten wir ein Beispiel. Angenommen, wir haben ein 2x4-Array c:
c = np.arange(24).reshape((4, 6))
und wir möchten es in zwei 2x2-Arrays aufteilen. Wir wissen, dass der erste Block die Elemente aus den ersten beiden Zeilen und den ersten beiden Spalten umfassen sollte und der zweite Block aus den verbleibenden Elementen.
Mit der Umformungsoperation kann das Array in eine neue Form umgeformt werden. in diesem Fall 2x2x3. Die Anzahl der Zeilen und Spalten in der neuen Form wird als die ersten beiden Argumente angegeben, und das dritte Argument, -1, weist Numpy an, die erforderliche Dimension zu berechnen, um die Umformung gültig zu machen.
c.reshape(2, 2, -1)
swapaxes dann tauscht die Zeilen und Spalten aus, um das gewünschte Blockformat zu erhalten:
c.reshape(2, 2, -1).swapaxes(1, 2)
Schließlich wird eine zweite Umformung verwendet, um das Array auf das gewünschte Format zu reduzieren Form:
c.reshape(2, 2, -1).swapaxes(1, 2).reshape(-1, 2, 2)
Das Ergebnis sind je nach Wunsch zwei 2x2-Arrays:
[[[ 0 1] [ 6 7]] [[ 2 3] [ 8 9]]] [[[12 13] [18 19]] [[14 15] [20 21]]]
Der bereitgestellte Code enthält eine blockförmige Funktion, die diesen Slicing-Ansatz für jede gewünschte Anzahl von Blöcken verallgemeinert :
def blockshaped(arr, nrows, ncols): return (arr.reshape(h//nrows, nrows, -1, ncols) .swapaxes(1, 2) .reshape(-1, nrows, ncols))
Das obige ist der detaillierte Inhalt vonWie kann ich ein 2D-NumPy-Array in kleinere 2D-Arrays aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!