【问题标题】:numpy: extending arrays along a new axis?numpy:沿新轴扩展数组?
【发布时间】:2011-01-22 09:30:06
【问题描述】:

肯定有办法做到这一点...我无法解决。

我有一个 (9,4) 数组,我想沿第三轴重复它 4096 次...所以它变得简单 (9,4,4096),每个值都来自 9,4 数组沿新轴重复 4096 次。

如果我可疑的 3D 图有意义(对角线是 z 轴)

4|   /off to 4096
3|  /
2| /
1|/_ _ _ _ _ _ _ _ _ 
   1 2 3 4 5 6 7 8 9

干杯

编辑:澄清一下,这里的重点是对新轴的 4096 个“行”中的每一个重复的 (9,4) 数组。想象一个横截面 - 每个原始 (9,4) 数组都是 4096 长方体中的一个。

【问题讨论】:

  • np.tile 是另一种选择。查看this question的答案。
  • 您还绘制了 4 x 9 矩阵的图表。 :)

标签: python arrays numpy


【解决方案1】:

我认为有一个名为 np.full 的内置 numpy 函数。

a=np.zeros((9,4))
np.full((4096,9,4),a) 

这里有文档https://numpy.org/doc/stable/reference/generated/numpy.full.html

【讨论】:

    【解决方案2】:

    一个简单的 numpy 解决方案将使用 numpy.tile

    import numpy as np
    a = np.random.rand(9, 4)
    b = np.tile(a, (4096, 1, 1))
    

    【讨论】:

      【解决方案3】:

      问题太老了,但无论如何这里还有另一个选择:

      import numpy as np
      X = np.random.rand(9,4)
      Y = np.dstack([X] * 4096)
      

      【讨论】:

      • 你可以用[X] * 4096代替[X for i in range(4096)]。
      【解决方案4】:

      你也可以依靠广播规则来重复填充一个调整大小的数组:

      import numpy
      X = numpy.random.rand(9,4)
      Y = numpy.resize(X,(4096,9,4))
      

      如果你不喜欢这样排列的坐标轴,你可以转置:

      Z = Y.transpose(1,2,0)
      

      【讨论】:

        【解决方案5】:

        这是一种方法:

        import scipy
        X = scipy.rand(9,4,1)
        Y = X.repeat(4096,2)
        

        如果X 仅作为 (9,4) 提供给您,那么

        import scipy
        X = scipy.rand(9,4)
        Y = X.reshape(9,4,1).repeat(4096,2)
        

        【讨论】:

        • 再次感谢史蒂夫,我很困惑,因为我没有意识到你必须在使用重复方法之前重塑数组 - 它一直告诉我我正在尝试使用未定义的轴。不过现在说得通了。
        猜你喜欢
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 2017-06-03
        • 2015-12-15
        • 2021-07-20
        相关资源
        最近更新 更多