Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah saya boleh membahagikan tatasusunan NumPy 2D kepada tatasusunan 2D yang lebih kecil?
Menghiris Tatasusunan 2D kepada Tatasusunan yang Lebih Kecil
Masalah:
Anda ingin memecah dua dimensi ( 2D) Tatasusunan NumPy menjadi tatasusunan 2D yang lebih kecil. Sebagai contoh, anda mungkin mahu menukar tatasusunan 2x4 kepada dua tatasusunan 2x2.
Penyelesaian:
Gabungan bentuk semula dan fungsi swapax membolehkan anda membahagikan tatasusunan anda kepada "blok. " Berikut ialah pelaksanaan Python yang mencapai ini:
def blockshaped(arr, nrows, ncols): h, w = arr.shape assert h % nrows == 0, f"{h} rows is not evenly divisible by {nrows}" assert w % ncols == 0, f"{w} cols is not evenly divisible by {ncols}" return (arr.reshape(h//nrows, nrows, -1, ncols) .swapaxes(1,2) .reshape(-1, nrows, ncols))
Dalam penyelesaian ini:
Contoh:
Pertimbangkan input berikut tatasusunan:
c = np.arange(24).reshape((4, 6)) print(c) [out]: [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]]
Menggunakan bentuk blok dengan nrows=2 dan ncols=3, anda boleh membahagikan tatasusunan ini ke dalam blok berikut:
print(blockshaped(c, 2, 3)) [out]: [[[ 0 1 2] [ 6 7 8]] [[ 3 4 5] [ 9 10 11]] [[12 13 14] [18 19 20]] [[15 16 17] [21 22 23]]]
Demonstrasi ini menggambarkan cara anda boleh menghiris 2D tatasusunan kepada tatasusunan segi empat tepat yang lebih kecil daripada dimensi yang ditentukan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh membahagikan tatasusunan NumPy 2D kepada tatasusunan 2D yang lebih kecil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!