Trong [35]: arr = np.arange(1,17).reshape(4,4)
Trong [36]: arr2 = arr.reshape(2,2,2,2)
Trong [37]: mảng2
Ra [37]:
mảng([[[[ 1, 2],
[3, 4]],
[[ 5, 6],
[7, 8]]],
[[[ 9, 10],
[11, 12]],
[[13, 14],
[15, 16]]]])
Tôi đã thực hiện một số thử nghiệm và sai sót với ý tưởng chuyển đổi nhưng không nhận được bất kỳ kết quả nào.
Nhưng hãy lùi lại một bước và thử chèn lát:
Trong [42]: out = np.zeros_like(arr)
Trong [43]: out[::2,::2]=arr2[0,0]
Trong [44]: out[::2,1::2]=arr2[0,1]
Vào [45]: ra
Ra [45]:
mảng([[1, 5, 2, 6],
[0, 0, 0, 0],
[3, 7, 4, 8],
[0, 0, 0, 0]])
Đây dường như là một giải pháp khả thi. Điều này có thể được đưa vào một vòng lặp (hoặc 2).
Trong [50]: out = np.zeros_like(arr)
Trong [51]: cho i,j trong np.ndindex(2,2):
...: out[i::2,j::2] = arr2[i,j]
...:
Vào [52]: ra
Ra [52]:
mảng([[ 1, 5, 2, 6],
[9, 13, 10, 14],
[3, 7, 4, 8],
[11, 15, 12, 16]])
Sẽ out
Việc chia thành mảng 4d giúp chúng ta hình dung được Ra [37]
Chuyển đổi:
Trong [57]: out.reshape(2,2,2,2)
Ra [57]:
mảng([[[[ 1, 5],
[2, 6]],
[[ 9, 13],
[10, 14]]],
[[[ 3, 7],
[4, 8]],
[[11, 15],
[12, 16]]]])
Nhưng có lẽ giải pháp lặp lại rõ ràng hơn là đủ nhanh.
Ví dụ: điều này tạo ra một khối 2x2 chính xác:
Trong [59]: arr2.transpose(0,2,3,1)
Ra [59]:
mảng([[[[ 1, 5],
[2, 6]],
[[ 3, 7],
[4, 8]]],
[[[ 9, 13],
[10, 14]],
[[11, 15],
[12, 16]]]])
Ngoài ra còn có một cuộc trao đổi:
Trong [62]: arr2.transpose(2,0,3,1).reshape(4,4)
Ra [62]:
mảng([[ 1, 5, 2, 6],
[9, 13, 10, 14],
[3, 7, 4, 8],
[11, 15, 12, 16]])
Tôi là một lập trình viên xuất sắc, rất giỏi!