将 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)
这处理了数组具有不同维数并沿第三轴堆叠数组的情况。
否则,要使用append
或concatenate
,您必须自己制作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 数组,扩展第三维的主要内容,如果未能解决你的问题,请参考以下文章