In [250]: a = np.array([1, 2, 3, 4, 5])
...: b = np.array([10, 20, 30, 40, 50])
...: c = np.array([15, 16, 17, 18, 19])
...: d = np.array([100, 200, 300, 400, 500])
np.stack
- это версия concatenate
, которая объединяет массивы на новой оси, которую мы можем выбрать:
In [251]: np.stack((a,b,c,d)).shape
Out[251]: (4, 5)
In [252]: np.stack((a,b,c,d),1).shape
Out[252]: (5, 4)
Затем мы можем изменить последнюю ось на (2,2):
In [253]: np.stack((a,b,c,d),1).reshape(5,2,2)
Out[253]:
array([[[ 1, 10],
[ 15, 100]],
[[ 2, 20],
[ 16, 200]],
[[ 3, 30],
[ 17, 300]],
[[ 4, 40],
[ 18, 400]],
[[ 5, 50],
[ 19, 500]]])
Первый стек такой же, как np.array
:
In [254]: np.array((a,b,c,d)).shape
Out[254]: (4, 5)
In [255]: np.array((a,b,c,d)).reshape(2,2,5)
Out[255]:
array([[[ 1, 2, 3, 4, 5],
[ 10, 20, 30, 40, 50]],
[[ 15, 16, 17, 18, 19],
[100, 200, 300, 400, 500]]])
, теперь используйте transpose
, чтобы переместить это 5-мерное измерение в начало:
In [256]: np.array((a,b,c,d)).reshape(2,2,5).transpose(2,0,1)
Таким образом, существуют разные способы объединения массивов и работы с измерениями. Я не думаю, что кто-то по своей природе проще. reshape
и transpose
дешевы, поэтому используйте их свободно.