将2D数组附加到3D数组,扩展第三维。

44

我有一个数组 A,它的形状是(480, 640, 3),以及一个形状为(480, 640)的数组B

如何将这两个数组合并成一个形状为(480, 640, 4)的数组?

我尝试过np.append(A,B),但它不保留维度,而axis选项会导致ValueError: all the input arrays must have same number of dimensions错误。

2个回答

54

使用dstack函数:

>>> np.dstack((A, B)).shape
(480, 640, 4)

这将处理数组维数不同的情况,并将数组沿第三个轴堆叠。

否则,要使用appendconcatenate,您必须自己使B成为三维数组,并指定要在其上连接它们的轴:

>>> np.append(A, np.atleast_3d(B), axis=2).shape
(480, 640, 4)

4
可以使用最基本的方法:np.concatenate(A, B[...,None], axis=2)来实现。该方法需要将A和B进行连接,其中B需要添加一个新的维度作为最后一个维度。在连接时,需要指定轴为第三个轴。 - hpaulj
@hpaulj 出现错误 TypeError: concatenate() 最多只接受2个参数 (给定了3个) - piepi
@piepi,你看过concatenate文档了吗?它们比我的旧评论更优先。无论如何,我应该写成np.concatenate([A, B[...,None]], axis=2)。也就是说,将数组放入列表中。 - hpaulj
2
@piepi,你看过concatenate文档了吗?它们比我的旧评论更优先。无论如何,我应该写成np.concatenate([A, B[...,None]], axis=2)。也就是说,将数组放入列表中。 - hpaulj
从Matlab过来,天哪,为什么我要花15分钟在谷歌上找这个。很明显,concatenate(<M x N x Q>, <M x N x 1>)应该得到<M x N x Q + 1>。 - Jan M.

3

使用np.stack应该可行, 但是需要注意的是两个数组都必须是二维形式。

np.stack([A,B])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接