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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 07:08:02340Durchsuche

How to Slice a 2D Array into Smaller 2D Subarrays in NumPy?

2D-Arrays in kleinere 2D-Subarrays aufteilen

Frage:
Können wir ein 2D-Array in kleinere unterteilen? 2D-Arrays in NumPy?

Beispiel:
Transformiert ein 2x4-Array in zwei 2x2-Arrays:

[[1,2,3,4]   ->    [[1,2] [3,4]
 [5,6,7,8]]          [5,6] [7,8]]

Mechanismus:

Anstatt neue Arrays zu erstellen, besteht ein besserer Ansatz darin, das vorhandene Array mit reshape() und umzuformen Tauschen Sie Achsen mit swapaxes() aus.

Blockförmige Funktion:

Unten finden Sie die Implementierung der blockförmigen Funktion:

def blockshaped(arr, nrows, ncols):
    """
    Partitions an array into blocks.

    Args:
        arr (ndarray): The original array.
        nrows (int): Number of rows in each block.
        ncols (int): Number of columns in each block.

    Returns:
        ndarray: Partitioned array.
    """
    h, w = arr.shape
    assert h % nrows == 0, f"{h} rows is not evenly divisible by {nrows}"
    assert w % ncols == 0, f"{w} cols is not evenly divisible by {ncols}"
    return (arr.reshape(h // nrows, nrows, -1, ncols)
               .swapaxes(1, 2)
               .reshape(-1, nrows, ncols))

Demo :

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

print(blockshaped(c, 2, 3))

Alternative Lösung:

Blockwise_view von SuperBatFish bietet eine weitere Option, die eine andere Blockanordnung und ansichtsbasierte Darstellung bietet.

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