1

$(x- \ mu)^ T \ Sigma ^ {-1}(x- \ mu)$のような行列積がある場合、これをnumpy配列に書き込む方法は次のようになりますreduce(numpy.dot,((x-mu).T, scipy.linalg.inv(Sigma), x-mu))か?MatlabとRの構文は非常に単純なので、numpyに同等の演算子構文がないのは少し奇妙に思えます。

4

3 に答える 3

4

また、試すことができます:

x = x.view(np.matrix)
isigma = scipy.linalg.inv(Sigma).view(np.matrix)
result = (x-mu).T * isigma * (x-mu)

配列を行列として表示することにより、を使用するときに行列の乗算を実行する.__mul__演算子を使用できるようになります。np.matrix*

于 2012-08-21T14:22:10.970 に答える
1

次のように書くこともできます(Numpy> = 1.4程度)

from scipy.linalg import inv

(x - mu).T.dot(inv(Sigma)).dot(x - mu)

他の回答で述べたように、演算子の構文が制限されているのは、Pythonで使用できる演算子の数が制限されているためです。

于 2012-08-24T09:48:59.663 に答える
1

主な問題は*、numpy配列の要素ごとの乗算としてすでに定義されており、行列の乗算に他の明白な演算子が残っていないことです。*解決策は、Pierreが示唆しているように、行列の乗算を意味するnumpy行列に変換することです。

Pythonに新しい演算子タイプ(たとえば、PEP 225 )を追加する提案がいくつかあります。これにより、~*行列の乗算を表すようなものが可能になります。

于 2012-08-21T15:04:26.893 に答える