Думаю, мои комментарии не были достаточно ясными.
In [811]: arr = np.ones((4,4,2,2),int)
In [812]: arr.swapaxes(0,2).shape
Out[812]: (2, 4, 4, 2)
Да, это можно изменить в (8,8), но обязательно должно быть какое-то транспонирование, поскольку одна пара измерений(2,4) и другие (4,2).
Если вы поменялись осями для получения (2,4,2,4) или (4,2,4,2), я ожидаюизменение формы будет правильным.
Точные детали того, какой обмен является правильным, зависят от того, как вы хотите расположить субблоки.Надеюсь, вы можете отследить это?
Создайте простой массив с хорошими (2,2) блоками:
In [813]: arr = np.arange(4).reshape(2,2)
In [815]: arr1 =np.tile(arr[None,None,:,:],(4,4,1,1))
In [816]: arr1.shape
Out[816]: (4, 4, 2, 2)
In [817]: arr1
Out[817]:
array([[[[0, 1],
[2, 3]],
[[0, 1],
[2, 3]],
...
Посмотрите, что производят различные свопы:
In [822]: arr1.swapaxes(0,2).reshape(8,8)
Out[822]:
array([[0, 1, 0, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 0, 1, 0, 1],
[2, 3, 2, 3, 2, 3, 2, 3],
[2, 3, 2, 3, 2, 3, 2, 3],
[2, 3, 2, 3, 2, 3, 2, 3],
[2, 3, 2, 3, 2, 3, 2, 3]])
In [823]:
In [823]: arr1.swapaxes(1,3).reshape(8,8)
Out[823]:
array([[0, 0, 0, 0, 2, 2, 2, 2],
[1, 1, 1, 1, 3, 3, 3, 3],
[0, 0, 0, 0, 2, 2, 2, 2],
[1, 1, 1, 1, 3, 3, 3, 3],
[0, 0, 0, 0, 2, 2, 2, 2],
[1, 1, 1, 1, 3, 3, 3, 3],
[0, 0, 0, 0, 2, 2, 2, 2],
[1, 1, 1, 1, 3, 3, 3, 3]])
In [824]: arr1.swapaxes(1,2).reshape(8,8)
Out[824]:
array([[0, 1, 0, 1, 0, 1, 0, 1],
[2, 3, 2, 3, 2, 3, 2, 3],
[0, 1, 0, 1, 0, 1, 0, 1],
[2, 3, 2, 3, 2, 3, 2, 3],
[0, 1, 0, 1, 0, 1, 0, 1],
[2, 3, 2, 3, 2, 3, 2, 3],
[0, 1, 0, 1, 0, 1, 0, 1],
[2, 3, 2, 3, 2, 3, 2, 3]])
Тот, которыйзавод производит (4,2,4,2) форму:
In [825]: arr1.swapaxes(0,2).shape
Out[825]: (2, 4, 4, 2)
In [826]: arr1.swapaxes(1,3).shape
Out[826]: (4, 2, 2, 4)
In [827]: arr1.swapaxes(1,2).shape
Out[827]: (4, 2, 4, 2)
и еще один своп
In [829]: arr1.swapaxes(0,3).shape
Out[829]: (2, 4, 2, 4)
In [830]: arr1.swapaxes(0,3).reshape(8,8)
Out[830]:
array([[0, 0, 0, 0, 2, 2, 2, 2],
[0, 0, 0, 0, 2, 2, 2, 2],
[0, 0, 0, 0, 2, 2, 2, 2],
[0, 0, 0, 0, 2, 2, 2, 2],
[1, 1, 1, 1, 3, 3, 3, 3],
[1, 1, 1, 1, 3, 3, 3, 3],
[1, 1, 1, 1, 3, 3, 3, 3],
[1, 1, 1, 1, 3, 3, 3, 3]])