NumPy - 列向量与行向量的标量乘法

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

有更好的方式吗?

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

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] 的含义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接