了解numpy的dstack函数

发布于 2021-01-29 15:11:46

我在理解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]]])

首先,ab没有第三轴,所以我将如何堆叠起来一起“ 第三轴”以开始?第二,假设ab是2D图像的表示形式,为什么我最终在结果中得到
三个 2D数组而不是两个“按顺序”排列的2D数组?

关注者
0
被浏览
138
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    它更容易理解np.vstacknp.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)

    由于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 *认为是不好的做法,原因有几个。惯用的方法是import numpy as np



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看