【问题标题】:numpy array divide column by vectornumpy 数组除以向量
【发布时间】:2016-06-10 06:29:55
【问题描述】:

我有一个 3x3 的 numpy 数组,我想用一个 3x1 的向量来划分它的每一列。我知道如何通过向量的元素来划分每一行,但我无法找到划分每一列的解决方案。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    最简单的好像是

    A = np.arange(1,10).reshape(3,3)
    b=np.arange(1,4)
    A/b
    

    将是

    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    

    和 b 将是

    array([1, 2, 3])
    

    分工会产生

    array([[1. , 1. , 1. ],
           [4. , 2.5, 2. ],
           [7. , 4. , 3. ]])
    

    第一列除以1,第二列除以2,第三列除以3。 如果我将您的列误解为行,只需使用 .T 进行转换 - 正如上面 C_Z_ 回答的那样。

    【讨论】:

      【解决方案2】:

      让我们尝试几件事:

      In [347]: A=np.arange(9.).reshape(3,3)
      In [348]: A
      Out[348]: 
      array([[ 0.,  1.,  2.],
             [ 3.,  4.,  5.],
             [ 6.,  7.,  8.]])
      
      In [349]: x=10**np.arange(3).reshape(3,1)
      
      In [350]: A/x
      Out[350]: 
      array([[ 0.  ,  1.  ,  2.  ],
             [ 0.3 ,  0.4 ,  0.5 ],
             [ 0.06,  0.07,  0.08]])
      

      所以这将每一行除以不同的值

      In [351]: A/x.T
      Out[351]: 
      array([[ 0.  ,  0.1 ,  0.02],
             [ 3.  ,  0.4 ,  0.05],
             [ 6.  ,  0.7 ,  0.08]])
      

      这将每一列除以不同的值

      (3,3) 除以(3,1) => 跨列复制x

      通过转置(1,3) 数组跨行复制。

      在使用.T(转置)时,x 是 2d 很重要。 (3,) 数组转置为 (3,) 数组 - 也就是说,没有变化。

      【讨论】:

        【解决方案3】:

        你可以转置你的数组来划分每一列

        (arr_3x3.T/arr_3x1).T
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-10
          • 2016-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多