【问题标题】:numpy - scalar multiplication of column vector times row vectornumpy - 列向量乘以行向量的标量乘法
【发布时间】:2013-04-04 23:23:39
【问题描述】:

在python numpy中解决以下问题的最佳和最有效的方法是什么:

给定一个权重向量:

weights = numpy.array([1, 5, 2])

和一个值向量:

values = numpy.array([1, 3, 10, 4, 2])

因此我需要一个矩阵,它在每一行包含values 向量标量乘以weights[row] 的值:

result = [
    [1,  3, 10,  4,  2],
    [5, 15, 50, 20, 10],
    [2,  6, 20,  8,  4]
]

我找到的一个解决方案如下:

result = numpy.array([ weights[n]*values for n in range(len(weights)) ])

有没有更好的办法?

【问题讨论】:

    标签: python vector matrix numpy


    【解决方案1】:

    您可以将weights 重塑为一个维度 (3,1) 数组,然后将其乘以values

    weights = numpy.array([1, 5, 2])[:,None]  #column vector
    values = numpy.array([1, 3, 10, 4, 2])
    result = weights*values
    
    print(result)
    
    array([[ 1,  3, 10,  4,  2],  
          [ 5, 15, 50, 20, 10],  
          [ 2,  6, 20,  8,  4]])
    

    This answer 解释[:,None]

    【讨论】:

      【解决方案2】:

      此操作称为outer product。可以使用numpy.outer()来执行:

      In [6]: numpy.outer(weights, values)
      Out[6]: 
      array([[ 1,  3, 10,  4,  2],
             [ 5, 15, 50, 20, 10],
             [ 2,  6, 20,  8,  4]])
      

      【讨论】:

      • 很好!!谢谢!正是我需要的!
      猜你喜欢
      • 2020-03-16
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      相关资源
      最近更新 更多