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

Posted

技术标签:

【中文标题】将 2D 数组附加到 3D 数组,扩展第三维【英文标题】:Append 2D array to 3D array, extending third dimension 【发布时间】:2016-03-25 06:44:15 【问题描述】:

我有一个数组A,其形状为(480, 640, 3),还有一个数组B,其形状为(480, 640)

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

我尝试了np.append(A,B),但它没有保持尺寸,而axis 选项导致ValueError: all the input arrays must have same number of dimensions

【问题讨论】:

【参考方案1】:

使用np.stack 应该可以 但问题是两个数组都应该是 2D 形式的。

np.stack([A,B])

【讨论】:

【参考方案2】:

使用dstack:

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

这处理了数组具有不同维数并沿第三轴堆叠数组的情况。

否则,要使用appendconcatenate,您必须自己制作B 三维并指定要加入它们的轴:

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

【讨论】:

或者使用最基本的方法:np.concatenate(A, B[...,None], axis=2) @hpaulj 出现错误TypeError: concatenate() takes at most 2 arguments (3 given) @piepi,你看过concatenate 文档吗?他们优先于我的旧 cmets。无论如何,我应该写np.concatenate([A, B[...,None]], axis=2)。也就是把数组放到一个列表中 @piepi,你看过concatenate 文档吗?他们优先于我的旧 cmets。无论如何,我应该写np.concatenate([A, B[...,None]], axis=2)。也就是把数组放到一个列表中

以上是关于将 2D 数组附加到 3D 数组,扩展第三维的主要内容,如果未能解决你的问题,请参考以下文章

使用OR将3D布尔数组缩减为2D

如何将二维数组复制到第三维,N次?

二维数组 cudaMallocPitch() 和三维数组 cudaMalloc3D() 的使用

numpy with python:将3d数组转换为2d

单图像三维重建2D到3D风格迁移和3D DeepDream

将 2d 矩阵转换为 3d 单热矩阵 numpy