In [4]: x = np.arange(4).reshape(2,2)
...: y = np.arange(-3,1).reshape(2,2)
...:
np.array
объединяет элементы вдоль новой первой оси:
In [5]: np.array((x,y))
Out[5]:
array([[[ 0, 1],
[ 2, 3]],
[[-3, -2],
[-1, 0]]])
np.stack
с осью по умолчанию 0 делает то же самое:
In [6]: np.stack((x,y))
Out[6]:
array([[[ 0, 1],
[ 2, 3]],
[[-3, -2],
[-1, 0]]])
Но мы можем указать другую новую ось:
In [7]: np.stack((x,y), axis=2)
Out[7]:
array([[[ 0, -3],
[ 1, -2]],
[[ 2, -1],
[ 3, 0]]])
Мы также можем достичь этого, выполнив 3D транспонирование:
В [9]: np.array ((x, y)). Transpose (1,2,0)
Из [9]:
массив ([[[0, -3],
[1, -2]],
[[ 2, -1],
[ 3, 0]]])
Ваша двойная транспонирование аналогично, за исключением того, что сначала x.transpose(0,1)
, а затем заканчивается transpose(0,1,2)
.
Требуемую транспонирование легче визуализировать, если размеры различаются, например, (2,3,4) вместо (2,2,2).
stack
расширяет размеры входов и объединяет их. Это удобно, но не делать ничего, что вы не можете сделать напрямую:
np.concatenate((x[...,None],y[...,None]), axis=2)