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))
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)
swapaxes kemudian menukar baris dan lajur untuk mendapatkan format blok yang diingini:
c.reshape(2, 2, -1).swapaxes(1, 2)
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)
Hasilnya ialah dua Tatasusunan 2x2, seperti yang dikehendaki:
[[[ 0 1] [ 6 7]] [[ 2 3] [ 8 9]]] [[[12 13] [18 19]] [[14 15] [20 21]]]
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))
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!