【问题标题】:Expanding an array along particular dimension沿特定维度扩展数组
【发布时间】:2019-08-13 17:45:22
【问题描述】:

我有一个数组如下:

arr = np.arange(2*1*15).reshape(2, 1, 15)

现在,我如何扩展这个数组来塑造(2, 10, 15)。要填写这些值,可以使用与原始数组的(1, 15) 部分相同的值(即从最后两个维度)。

【问题讨论】:

    标签: numpy multidimensional-array reshape tensor numpy-ndarray


    【解决方案1】:

    您可以使用numpy.repeat 沿第二个轴复制值:

    np.repeat(arr, 10, axis=1).shape
    # (2, 10, 15)
    

    【讨论】:

      【解决方案2】:

      与此同时,我发现numpy.broadcast_to 也可以完成这项工作。

      作为一个人为的小例子:

      In [8]: np.broadcast_to(arr, (2, 5, 15))
      Out[8]: 
      array([[[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
              [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
              [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
              [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
              [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14]],
      
             [[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
              [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
              [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
              [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
              [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]]])
      

      性能说明:计时后,我发现numpy.broadcast_to 大约是。与 numpy.repeat 相比,速度快 40 倍reason for this performance gain 是因为:

      它更快,因为它创建了一个数据的只读视图,其中包含许多指向相同内存位置的元素。如果复制结果,则性能大致相同。如果您不需要编辑最终结果,它会提供巨大的性能提升

      【讨论】:

      • 它更快,因为它创建了数据的只读视图,其中许多元素指向相同的内存位置。如果你copy这个结果,性能差不多。如果您不需要编辑最终结果,它会提供巨大的性能提升
      猜你喜欢
      • 2011-01-22
      • 2022-01-19
      • 1970-01-01
      • 2021-12-19
      • 2014-02-25
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      相关资源
      最近更新 更多