2

この式を python でコーディングしようとしていますが、問題があります。

ここに画像の説明を入力

これは私がこれまでに持っていたコードで、アドバイスが必要でした。

 x = 1x2 vector
 mu = 1x2 vector
 Sigma = 2x2 matrix 

 xT = (x-mu).transpose()
 sig = Sigma**(-1)
 dotP = dot(xT ,sig )
 dotdot = dot(dotP, (x-mu))
  E = exp( (-1/2) dotdot  )

私は正しい軌道に乗っていますか?助言がありますか?

4

1 に答える 1

4
  • Sigma ** (-1)あなたが望むものではありません。これは、 の各要素をSigma累乗-1します。つまり1 / Sigma、数式では逆を意味し、Python では として記述されnp.linalg.inv(Sigma)ます。

  • (-1/2) dotdot構文エラーです。Python では、乗算のために常に include*するか、単に- dotdot / 2. おそらく python 2 を使用しているので、除算は少し不安定です。実行していない限りfrom __future__ import division(強くお勧めします)、1/2実際には になります0。これは整数除算であるためです。あなたは.5それを回避するために使用できますが、私が言ったように、分割インポートを行うことを強くお勧めします.

  • x-muこれは非常に些細なことですが、減算を 2 回行っていますが、必要なのは 1 回だけです。ベクトルが大きい場合は、一度だけ実行することで速度を少し節約できます。(もちろん、ここでは 2 次元で実行しているので、これはまったく問題ではありません。)

  • を呼び出すよりもthe_array.transpose()(これで問題ありません)、 を使用する方が便利なことがよくありますthe_array.Tが、これは同じことです。

  • 名前も使用しませんxT。の転置であることを意味しますがx、これは誤りです。

私はおそらく次のように組み合わせるでしょう:

# near the top of the file
# you probably did some kind of `from somewhere import *`.
# most people like to only import specific names and/or do imports like this,
# to make it clear where your functions are coming from.
import numpy as np

centered = x - mu
prec = np.linalg.inv(Sigma)
E = np.exp(-.5 * np.dot(centered.T, np.dot(prec, centered)))
于 2012-09-16T05:06:48.750 に答える