2013-04-12 69 views
4

什么是解决在python numpy的下面最好的和最有效的方式: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)) ]) 

有没有更好的办法?

回答

7

这种操作称为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]]) 
+0

不错!谢谢!正是我需要的! – SailAvid

3

可以重塑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]