Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menghiris Tatasusunan 2D kepada Tatasusunan 2D yang Lebih Kecil dengan NumPy?

Bagaimana untuk Menghiris Tatasusunan 2D kepada Tatasusunan 2D yang Lebih Kecil dengan NumPy?

DDD
Lepaskan: 2024-11-07 16:21:02
asal
719 orang telah melayarinya

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

Menghiris Tatasusunan 2D kepada Tatasusunan 2D yang Lebih Kecil dengan Numpy

Selalunya, ia menjadi perlu untuk memisahkan tatasusunan 2D kepada tatasusunan 2D yang lebih kecil. Sebagai contoh, pertimbangkan tugas membahagikan tatasusunan 2x4 kepada dua tatasusunan 2x2.

Penyelesaian:

Gabungan bentuk semula dan fungsi swapax terbukti berkesan dalam senario ini:

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))
Salin selepas log masuk

Contoh Penggunaan:

Pertimbangkan tatasusunan berikut:

c = np.arange(24).reshape((4, 6))
print(c)
Salin selepas log masuk

Output:

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

Menghiris ini tatasusunan menjadi blok yang lebih kecil:

print(blockshaped(c, 2, 3))
Salin selepas log masuk

Output:

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

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

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

 [[15 16 17]
  [21 22 23]]]
Salin selepas log masuk

Nota Tambahan:

  • Fungsi unblockshaped boleh digunakan untuk terbalikkan penghirisan.
  • Pandangan blockwise_view Superbatfish menyediakan alternatif dengan format tersendiri.

Atas ialah kandungan terperinci Bagaimana untuk Menghiris Tatasusunan 2D kepada Tatasusunan 2D yang Lebih Kecil dengan NumPy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan