Heim >Backend-Entwicklung >Python-Tutorial >Wie schneide ich ein 2D-Array mit NumPy in kleinere 2D-Arrays auf?

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

DDD
DDDOriginal
2024-11-07 16:21:02672Durchsuche

How to Slice a 2D Array into Smaller 2D Arrays with NumPy?

Aufteilen eines 2D-Arrays in kleinere 2D-Arrays mit Numpy

Oft ist es notwendig, ein 2D-Array in kleinere 2D-Arrays aufzuteilen. Stellen Sie sich zum Beispiel die Aufgabe vor, ein 2x4-Array in zwei 2x2-Arrays zu unterteilen.

Lösung:

Eine Kombination aus Reshape- und Swapaxes-Funktionen erweist sich in diesem Szenario als effektiv:

import numpy as np

def blockshaped(arr, nrows, ncols):
    """
    Converts a 2D array into a 3D array with smaller subblocks.
    """
    h, w = arr.shape
    assert h % nrows == 0, f"{h} rows is not divisible by {nrows}"
    assert w % ncols == 0, f"{w} columns is not divisible by {ncols}"

    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))

Beispielverwendung:

Betrachten Sie das folgende Array:

c = np.arange(24).reshape((4, 6))
print(c)

Ausgabe:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

Slice this Array in kleinere Blöcke aufteilen:

print(blockshaped(c, 2, 3))

Ausgabe:

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

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

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

 [[15 16 17]
  [21 22 23]]]

Zusätzliche Hinweise:

  • Die unblockförmige Funktion kann verwendet werden, um Kehren Sie das Slicing um.
  • Blockwise_view von Superbatfish bietet mit seinem besonderen Format eine Alternative.

Das obige ist der detaillierte Inhalt vonWie schneide ich ein 2D-Array mit NumPy 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