Wie schneide ich ein 2D-Numpy-Array in kleinere 2D-Arrays auf?

Susan Sarandon
Freigeben: 2024-11-11 21:27:02
Original
663 Leute haben es durchsucht

How to Slice a 2D Numpy Array into Smaller 2D Arrays?

2D-Arrays in kleinere 2D-Arrays mit Numpy aufteilen

Numpy ist eine vielseitige Bibliothek zur Bearbeitung mehrdimensionaler Arrays in Python. Es bietet verschiedene Methoden zur Array-Manipulation, einschließlich Slicing zum Extrahieren bestimmter Abschnitte. In diesem Artikel wird eine Lösung zum Aufteilen eines 2D-Arrays in kleinere 2D-Arrays untersucht und dabei das bereitgestellte Beispiel emuliert:

[[1,2,3,4],   ->    [[1,2] [3,4]   
 [5,6,7,8]]          [5,6] [7,8]]
Nach dem Login kopieren

Der Reshape- und Swapaxes-Ansatz

Die vorgeschlagene Lösung nutzt die Reshape- und Swapaxes-Funktionen, um Erzielen Sie den gewünschten Schnitt. Die Reshape-Funktion ändert die Form des Arrays und die Swapaxes-Funktion ändert die angegebenen Achsen. Im folgenden Python-Code kapselt die blockförmige Funktion diesen Ansatz:

def blockshaped(arr, nrows, ncols):
    h, w = arr.shape
    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))
Nach dem Login kopieren

Erklärung:

  • h, w = arr.shape: Speichert die Abmessungen des Eingabearrays arr.
  • arr.reshape(h//nrows, nrows, -1, ncols): Formt das Array in ein 4-dimensionales Array um. Die ersten beiden Dimensionen stellen sicher, dass es h/nrows-Blöcke gibt, die jeweils nrows-Zeilen enthalten. Die dritte Dimension wird verwendet, um die Spalten beizubehalten, und die vierte Dimension enthält ncols-Spalten in jedem Block.
  • swapaxes(1,2): Vertauscht die zweite und dritte Dimension, wodurch die Blöcke entlang der Zeilen und effektiv permutiert werden columns.
  • reshape(-1, nrows, ncols): Formt das Array wieder in die gewünschte Form um, bestehend aus h/nrows * w/ncols 2D-Arrays, jeweils mit Nrows und Ncols.

Beispielverwendung

Um die Verwendung zu veranschaulichen, betrachten Sie das Beispielarray c:

np.random.seed(365)
c = np.arange(24).reshape((4, 6))
Nach dem Login kopieren

Slicing c in 2x3 Blöcke:

sliced = blockshaped(c, 2, 3)
Nach dem Login kopieren

in Scheiben geschnitten hält das Gewünschte 2D-Blöcke:

[[[ 0  1  2]
  [ 6  7  8]]

 [[ 3  4  5]
  [ 9 10 11]]

 [[12 13 14]
  [18 19 20]]

 [[15 16 17]
  [21 22 23]]]
Nach dem Login kopieren

Fazit

Diese Lösung zeigt, wie man ein 2D-Numpy-Array mithilfe der Reshape- und Swapaxes-Funktionen in kleinere 2D-Arrays aufteilt. Es bietet einen flexiblen und effizienten Ansatz zur Verarbeitung und Bearbeitung von Bildern oder anderen Matrizen.

Das obige ist der detaillierte Inhalt vonWie schneide ich ein 2D-Numpy-Array in kleinere 2D-Arrays auf?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage