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

私が見つけた1つの解決策は次のとおりです。

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 に答える