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

Susan Sarandon
Lepaskan: 2024-11-11 21:27:02
asal
666 orang telah melayarinya

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

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

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

Menghiris c menjadi 2x3 blok:

sliced = blockshaped(c, 2, 3)
Salin selepas log masuk

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan