Heim  >  Artikel  >  Backend-Entwicklung  >  Wie schneide ich ein 2D-Numpy-Array in kleinere 2D-Arrays auf?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-11 21:27:02659Durchsuche

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]]

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))

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))

Slicing c in 2x3 Blöcke:

sliced = blockshaped(c, 2, 3)

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]]]

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!

Stellungnahme:
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