6

在 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)) ])

有没有更好的办法?

4

2 回答 2

8

这种操作称为外积。可以使用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]])
于 2013-04-12T12:27:50.430 回答
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]])

这个答案解释了[:,None]

于 2013-04-12T12:27:09.030 回答