In [277]: pop = np.arange(9*5).reshape(3,3,1,5)
In [278]: pop
Out[278]:
array([[[[ 0, 1, 2, 3, 4]],
[[ 5, 6, 7, 8, 9]],
[[10, 11, 12, 13, 14]]],
[[[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24]],
[[25, 26, 27, 28, 29]]],
[[[30, 31, 32, 33, 34]],
[[35, 36, 37, 38, 39]],
[[40, 41, 42, 43, 44]]]])
Поменять местами последние две оси даст требуемые «векторы столбцов»:
In [279]: pop.transpose(0,1,3,2)
Out[279]:
array([[[[ 0],
[ 1],
[ 2],
[ 3],
[ 4]],
[[ 5],
[ 6],
[ 7],
[ 8],
[ 9]],
[[10],
[11],
[12],
[13],
[14]]],
[[[15],
[16],
[17],
[18],
[19]],
[[20],
[21],
[22],
[23],
[24]],
[[25],
[26],
[27],
[28],
[29]]],
[[[30],
[31],
[32],
[33],
[34]],
[[35],
[36],
[37],
[38],
[39]],
[[40],
[41],
[42],
[43],
[44]]]])
Затем с помощью перемещения блока обработки текста переставьте блоки.
Еще одна транспозиция и reshape упорядочит значения желаемым образом, но скобки будут не такими, как вы хотите:
In [281]: pop.transpose(0,3,2,1).reshape(3,5,3)
Out[281]:
array([[[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]],
[[15, 20, 25],
[16, 21, 26],
[17, 22, 27],
[18, 23, 28],
[19, 24, 29]],
[[30, 35, 40],
[31, 36, 41],
[32, 37, 42],
[33, 38, 43],
[34, 39, 44]]])