gpt4 book ai didi

python - 理解 numpy 的 dstack 函数

转载 作者:IT老高 更新时间:2023-10-28 22:17:17 33 4
gpt4 key购买 nike

我很难理解 numpy 的 dstack 函数实际上在做什么。文档相当稀疏,只是说:

Stack arrays in sequence depth wise (along third axis).

Takes a sequence of arrays and stack them along the third axis to make a single array. Rebuilds arrays divided by dsplit. This is a simple way to stack 2D arrays (images) into a single 3D array for processing.

所以要么我真的很愚蠢,而且这个意思很明显,要么我似乎对“堆叠”、“按顺序”、“深度明智”或“沿轴”等术语有一些误解。然而,我的印象是,我在 vstackhstack 的上下文中理解这些术语就好了。

我们来看这个例子:

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]]])

首先,ab 没有第三轴,那么我如何将它们沿“the 第三轴”堆叠开始?其次,假设 ab 是 2D 图像的表示,为什么我会在结果中得到 三个 2D 数组而不是到两个“按顺序”排列的二维数组?

最佳答案

通过查看 ,更容易理解 np.vstacknp.hstacknp.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)

由于 ab 都是二维的,np.dstack 通过插入大小为 1 的第三维来扩展它们。这等效使用 np.newaxis (或者,None)在三维索引它们,如下所示:

print(a[:, :, np.newaxis].shape)
# (3, 2, 1)

如果 c = np.dstack((a, b)),那么 c[:, :, 0] == ac[: , :, 1] == b.

您可以使用 np.concatenate 更明确地执行相同的操作像这样:

print(np.concatenate((a[..., None], b[..., None]), axis=2).shape)
# (3, 2, 2)

* 使用 import * 将模块的全部内容导入全局命名空间是 considered bad practice for several reasons .惯用的方法是 import numpy as np.

关于python - 理解 numpy 的 dstack 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25116595/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com