Bagaimanakah saya boleh Menghiris Tatasusunan NumPy 2D kepada Tatasusunan 2D yang Lebih Kecil?

DDD
Lepaskan: 2024-11-10 14:42:02
asal
785 orang telah melayarinya

How can I Slice a 2D NumPy Array into Smaller 2D Arrays?

Menghiris Tatasusunan 2D menjadi Tatasusunan 2D yang Lebih Kecil dalam NumPy

Apabila bekerja dengan imej atau data lain yang diwakili sebagai tatasusunan 2D, selalunya perlu untuk potong mereka kepada tatasusunan yang lebih kecil untuk pemprosesan atau analisis. Dalam numpy, ini boleh dicapai menggunakan gabungan operasi bentuk semula dan swapax.

Untuk memahami pendekatan, mari kita pertimbangkan satu contoh. Katakan kita mempunyai tatasusunan 2x4 c:

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

dan kami mahu menghirisnya kepada dua tatasusunan 2x2. Kita tahu bahawa blok pertama harus terdiri daripada unsur-unsur daripada dua baris pertama dan dua lajur pertama, dan blok kedua daripada unsur-unsur yang tinggal.

Operasi bentuk semula boleh digunakan untuk membentuk semula tatasusunan menjadi bentuk baharu, dalam kes ini 2x2x3. Bilangan baris dan lajur dalam bentuk baharu dinyatakan sebagai dua argumen pertama dan argumen ketiga, -1, memberitahu numpy untuk mengira dimensi yang diperlukan untuk menjadikan bentuk semula itu sah.

c.reshape(2, 2, -1)
Salin selepas log masuk

swapaxes kemudian menukar baris dan lajur untuk mendapatkan format blok yang diingini:

c.reshape(2, 2, -1).swapaxes(1, 2)
Salin selepas log masuk

Akhir sekali, bentuk semula kedua digunakan untuk meratakan tatasusunan ke dalam bentuk yang diingini:

c.reshape(2, 2, -1).swapaxes(1, 2).reshape(-1, 2, 2)
Salin selepas log masuk

Hasilnya ialah dua Tatasusunan 2x2, seperti yang dikehendaki:

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

[[[12 13]
  [18 19]] [[14 15]
  [20 21]]]
Salin selepas log masuk

Kod yang disediakan termasuk fungsi, berbentuk blok, yang menyamaratakan pendekatan penghirisan ini untuk sebarang bilangan blok yang dikehendaki:

def blockshaped(arr, nrows, ncols):
    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1, 2)
               .reshape(-1, nrows, ncols))
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan