了解numpy的dstack函数
我在理解numpydstack
函数实际上正在执行时遇到了一些麻烦。该文档相当稀疏,只是说:
沿深度方向(沿第三轴)按顺序堆叠数组。
采取一系列数组并将其沿第三轴堆叠以形成单个数组。重建除以的数组
dsplit
。这是将2D数组(图像)堆叠到单个3D数组中进行处理的简单方法。
因此,要么我真的很愚蠢,其含义很明显,要么我似乎对术语“堆叠”,“按顺序”,“深度方向”或“沿轴”有一些误解。但是,我的印象是,我在的背景下理解了这些术语,vstack
并且hstack
很好。
让我们来看这个例子:
In [193]: a
Out[193]:
array([[0, 3],
[1, 4],
[2, 5]])
In [194]: b
Out[194]:
array([[ 6, 9],
[ 7, 10],
[ 8, 11]])
In [195]: dstack([a,b])
Out[195]:
array([[[ 0, 6],
[ 3, 9]],
[[ 1, 7],
[ 4, 10]],
[[ 2, 8],
[ 5, 11]]])
首先,a
并b
没有第三轴,所以我将如何堆叠起来一起“ 的 第三轴”以开始?第二,假设a
和b
是2D图像的表示形式,为什么我最终在结果中得到
三个 2D数组而不是两个“按顺序”排列的2D数组?
-
它更容易理解
np.vstack
,np.hstack
并且np.dstack
*通过看做.shape
输出数组的属性。使用两个示例数组:
print(a.shape, b.shape) # (3, 2) (3, 2)
-
np.vstack
沿第一维连接…print(np.vstack((a, b)).shape)
(6, 2)
-
np.hstack
沿第二维连接…print(np.hstack((a, b)).shape)
(3, 4)
-
并
np.dstack
沿第三维连接。print(np.dstack((a, b)).shape)
(3, 2, 2)
由于
a
和b
都是二维的,因此np.dstack
通过插入大小为1的第三个维度来展开它们。这等效于使用np.newaxis
(或可选地None
)像这样在第三个维度中对它们进行索引:print(a[:, :, np.newaxis].shape) # (3, 2, 1)
如果
c = np.dstack((a, b))
,则c[:, :, 0] == a
和c[:, :, 1] == b
。您可以使用
np.concatenate
以下命令更明确地执行相同的操作:print(np.concatenate((a[..., None], b[..., None]), axis=2).shape) # (3, 2, 2)
*使用模块将模块的全部内容导入到全局名称空间
import *
被认为是不好的做法,原因有几个。惯用的方法是import numpy as np
。 -