【问题标题】:Contruct 3d array in numpy from existing 2d array从现有的 2d 数组在 numpy 中构造 3d 数组
【发布时间】:2010-12-16 04:58:40
【问题描述】:

在为 NumPy 计算准备数据期间。我很好奇构建方式:

myarray.shape => (2,18,18)

来自:

d1.shape => (18,18)
d2.shape => (18,18)

我尝试使用 NumPy 命令:

hstack([[d1],[d2]])

但它看起来不起作用!

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    np.stack() 函数提供了很多功能。你可以说:

    >>> d3 = np.stack([d1, d2])
    >>> d3.shape
    (2, 18, 18)
    

    但是,您也可以指定轴,阵列沿着该轴连接。因此,如果您想加入 RGB 图像的通道,您可以说:

    >>> d3 = np.stack([d1, d2], axis=-1)
    >>> d3.shape
    (18, 18, 2)
    

    【讨论】:

      【解决方案2】:
      arr3=np.dstack([arr1, arr2])
      

      arr1,arr2 是二维数组shape (256,256),arr3:shape(256,256,2)

      【讨论】:

      • 为此,因为它也适用于在图像上加入 RGB 通道,因为最终形状必须是 (height,width,3)
      【解决方案3】:

      hstack 和 vstack 不会改变数组的维数:它们只是将它们“并排”放置。因此,组合二维数组会创建一个新的二维数组(不是 3D 数组!)。

      你可以按照丹尼尔的建议去做(直接使用numpy.array([d1, d2]))。

      您也可以在堆叠之前将数组转换为 3D 数组,方法是为每个数组添加一个新维度:

      d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ])  # shape = (2, 18, 18)
      

      其实d1[newaxis,...].shape == (1, 18, 18),你可以直接堆叠两个3D数组,得到你想要的新3D数组(d3)。

      【讨论】:

      • np.vstack([a[np.newaxis,...],b[np.newaxis,...]]) 很有魅力!谢谢。
      【解决方案4】:

      只做d3 = array([d1,d2]) 似乎对我有用:

      >>> from numpy import array
      >>> # ... create d1 and d2 ...
      >>> d1.shape
      (18,18)
      >>> d2.shape
      (18,18)
      >>> d3 = array([d1, d2])
      >>> d3.shape
      (2, 18, 18)
      

      【讨论】:

      • 我有一个类似的问题。如果我已经获得了形状为(2,18,18)的 d3,并且我想将另一个二维数组 d4(18x18)添加到 d3 中以制作 3-d 数组(3,18,18)。我该怎么办?
      • 你只是vstack(d3, d4[np.newaxis,...]),就像我的回答一样。
      • 必须是 vstack((d3, d4[np.newaxis,...]))。需要两个 '(( ))'。
      猜你喜欢
      • 2021-11-09
      • 1970-01-01
      • 2018-04-22
      • 2017-07-27
      • 2012-12-09
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多