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

Bagaimana untuk Menghiris Tatasusunan Numpy 2D kepada Tatasusunan 2D yang Lebih Kecil?

Susan Sarandon
Susan Sarandonasal
2024-11-11 21:27:02739semak imbas

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

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

Numpy ialah perpustakaan serba boleh untuk memanipulasi tatasusunan berbilang dimensi dalam Python. Ia menawarkan pelbagai kaedah untuk manipulasi tatasusunan, termasuk menghiris untuk mengekstrak bahagian tertentu. Artikel ini meneroka penyelesaian untuk menghiris tatasusunan 2D kepada tatasusunan 2D yang lebih kecil, mencontohi contoh yang disediakan:

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

Pendekatan Bentuk Semula dan Swapaks

Penyelesaian yang dicadangkan memanfaatkan fungsi bentuk semula dan swapax untuk mencapai penghirisan yang dikehendaki. Fungsi bentuk semula mengubah bentuk tatasusunan, dan fungsi swapaxes交换es paksi yang ditentukan. Dalam kod Python berikut, fungsi berbentuk blok merangkum pendekatan ini:

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

Penjelasan:

  • h, w = arr.shape: Menyimpan dimensi daripada tatasusunan input arr.
  • arr.reshape(h//nrows, nrows, -1, ncols): Membentuk semula tatasusunan menjadi tatasusunan 4 dimensi. Dua dimensi pertama memastikan ia mempunyai blok h/nrows, setiap satu mengandungi baris nrows. Dimensi ketiga digunakan untuk mengekalkan lajur dan dimensi keempat mempunyai lajur ncols dalam setiap blok.
  • swapaxes(1,2): Swapaxes dimensi kedua dan ketiga, yang secara berkesan mengubah suai blok di sepanjang baris dan lajur.
  • bentuk semula(-1, nrows, ncols): Membentuk semula tatasusunan kembali kepada bentuk yang diingini, terdiri daripada h/nrows * w/ncols tatasusunan 2D, setiap satu dengan nrows dan ncols.

Contoh Penggunaan

Untuk menggambarkan penggunaan, pertimbangkan tatasusunan sampel c:

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

Menghiris c menjadi 2x3 blok:

sliced = blockshaped(c, 2, 3)

dihiris akan memegang blok 2D yang diingini:

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

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

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

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

Kesimpulan

Penyelesaian ini menunjukkan cara menghiris tatasusunan numpy 2D kepada tatasusunan 2D yang lebih kecil menggunakan fungsi bentuk semula dan swapax. Ia menyediakan pendekatan yang fleksibel dan cekap untuk memproses dan memanipulasi imej atau matriks lain.

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

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