Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich ein 2D-NumPy-Array in kleinere 2D-Arrays aufteilen?

Wie kann ich ein 2D-NumPy-Array in kleinere 2D-Arrays aufteilen?

DDD
Freigeben: 2024-11-10 14:42:02
Original
811 Leute haben es durchsucht

How can I Slice a 2D NumPy Array into Smaller 2D Arrays?

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))
Nach dem Login kopieren

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)
Nach dem Login kopieren

swapaxes dann tauscht die Zeilen und Spalten aus, um das gewünschte Blockformat zu erhalten:

c.reshape(2, 2, -1).swapaxes(1, 2)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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]]]
Nach dem Login kopieren

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))
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage