a
- (2,3,4).Для конкатенации по последней оси b
должно быть (2,3,1) (или, в более общем случае (2,3, n)).b.reshape(2,3)
поможет вам пройти часть пути, добавьте np.newaxis
, чтобы получить остаток пути.Или включите 3-ю ось в форму: b.reshape(2,3,1)
.
In [21]: np.concatenate((a, b.reshape(2,3)[:,:,None]),-1)
Out[21]:
array([[[1., 1., 1., 1., 9.],
[1., 1., 1., 1., 9.],
[1., 1., 1., 1., 9.]],
[[1., 1., 1., 1., 9.],
[1., 1., 1., 1., 9.],
[1., 1., 1., 1., 9.]]])
np.c_
работает с тем же изменением формы, np.c_[a, b.reshape(2,3,1)]
.
np.c_
(или np.r_
)принимает строковый параметр, который сообщает, как при необходимости расширять измерения.np.c_
является эквивалентом np.r_['-1,2,0',a, b.reshape(2,3)[:,:,None]]
.Этот строковый параметр немного сложен для понимания, но, поиграв с этим, я обнаружил, что это работает:
In [27]: np.c_['-1,3,0',a, b.reshape(2,3)]
Out[27]:
array([[[1., 1., 1., 1., 9.],
[1., 1., 1., 1., 9.],
[1., 1., 1., 1., 9.]],
[[1., 1., 1., 1., 9.],
[1., 1., 1., 1., 9.],
[1., 1., 1., 1., 9.]]])
Имейте в виду, что np.c_
использует np.concatenate
(как и все функции «стека»), поэтомуIn [21]
- самая прямая версия.Тем не менее некоторым людям нравится удобство формата np.c_
.
(np.column_stack
объединяется на оси 1; документы явно говорят о возврате 2d-массива. У вас есть 3D-случай.)
dstack
(стек глубины) работает: np.dstack((a, b.reshape(2,3)))
.Он создает трехмерные массивы с:
In [49]: np.atleast_3d(b.reshape(2,3)).shape
Out[49]: (2, 3, 1)
, что в данном случае совпадает с тем, что делает строка '-1,3,0'.