【问题标题】:2D of numpy arange [duplicate]numpy arange的2D [重复]
【发布时间】:2020-03-11 08:36:35
【问题描述】:

我想构建两个二维数组

a = [[0, 0, 0, 0, 0, 0],
     [1, 1, 1, 1, 1, 1],
     [2, 2, 2, 2, 2, 2],
     [3, 3, 3, 3, 3, 3],
     [4, 4, 4, 4, 4, 4],
     [5, 5, 5, 5, 5, 5]]

b = [[0, 1, 2, 3, 4, 5],
     [0, 1, 2, 3, 4, 5],
     [0, 1, 2, 3, 4, 5],
     [0, 1, 2, 3, 4, 5],
     [0, 1, 2, 3, 4, 5],
     [0, 1, 2, 3, 4, 5]]

但我不能使用 for 循环。我知道我可以使用 np.arange(5) 获得一个数组,但不确定如何将其转换为上面显示的 2 个 2D 数组。 任何帮助将不胜感激

【问题讨论】:

  • 你的意思是你不能使用 for 循环还是你的意思是它是一个限制?
  • 如果我的回答有帮助,请告诉我并考虑接受。干杯
  • 我会用它来创建大数组,所以使用两个 for 循环会让事情变得很慢
  • 更好的复制目标:“Cloning” row or column vectors

标签: python arrays numpy tile


【解决方案1】:

您只需要numpy.reshapenumpy.repeat。使用这个:

import numpy as np

n_columns = 6
a = np.repeat(np.arange(6), n_columns) 
a = a.reshape(6,n_columns)

array([[0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4, 4],
       [5, 5, 5, 5, 5, 5]])

b = a.T

array([[0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5]])

此代码适用于任何 n_columns 值。

【讨论】:

    【解决方案2】:

    你可以试试np.repeat:

    >>> x = np.arange(6).reshape(1,-1)
    >>> y = np.repeat(x,6,axis=0)
    >>> y
    array([[0, 1, 2, 3, 4, 5],
           [0, 1, 2, 3, 4, 5],
           [0, 1, 2, 3, 4, 5],
           [0, 1, 2, 3, 4, 5],
           [0, 1, 2, 3, 4, 5],
           [0, 1, 2, 3, 4, 5]])
    >>> z = y.T
    >>> z
    array([[0, 0, 0, 0, 0, 0],
           [1, 1, 1, 1, 1, 0],
           [2, 2, 2, 2, 2, 0],
           [3, 3, 3, 3, 3, 0],
           [4, 4, 4, 4, 4, 0],
           [5, 5, 5, 5, 5, 0]])
    

    【讨论】:

    • 反对票是怎么回事?谁能解释一下?
    • 尺寸与OP不同。这看起来与上面的答案相同(在我编辑之前)并在 2 分钟后发布。干杯
    • 误会——我没有(我自己)投反对票。我只是说为什么有人可以否决它。
    • 为了记录,最初我的 3 行将完全针对 OP。然后我编辑发布结果/输出
    • 不是,你的第一篇文章是:import numpy as np; a = np.repeat(np.arange(6),5); a.reshape(6,5)。所以你没有在第一次解决.T 方面。但是,我并不是说您复制了我的,或者您不知道转置。这是一个误解。无论如何,你的第一次尝试是不完整的,所以尽量不要成为FGITW,除非你解决了所有问题,你可以稍后通过编辑来美化,这很好。
    【解决方案3】:

    您可以使用numpy.mgridnumpy.meshgrid()

    np.mgrid[0:6, 0:6]
    # array([[[0, 0, 0, 0, 0, 0],
    #         [1, 1, 1, 1, 1, 1],
    #         [2, 2, 2, 2, 2, 2],
    #         [3, 3, 3, 3, 3, 3],
    #         [4, 4, 4, 4, 4, 4],
    #         [5, 5, 5, 5, 5, 5]],
    # 
    #        [[0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5]]])
    
    np.meshgrid(np.arange(6), np.arange(6))
    # [array([[0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5],
    #         [0, 1, 2, 3, 4, 5]]),
    #  array([[0, 0, 0, 0, 0, 0],
    #         [1, 1, 1, 1, 1, 1],
    #         [2, 2, 2, 2, 2, 2],
    #         [3, 3, 3, 3, 3, 3],
    #         [4, 4, 4, 4, 4, 4],
    #         [5, 5, 5, 5, 5, 5]])]
    

    然后简单地解压结果

    a, b = np.mgrid[0:6, 0:6]    
    

    【讨论】:

      【解决方案4】:

      还有np.indices

       I,J = np.indices((6,6))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 1970-01-01
        • 2017-04-02
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多