2014-01-16 1 views
7

sympyで多変量関数の(象徴的な)勾配をどのように計算するのですか?sympyで勾配を計算するベクトル化された方法はありますか?

明らかに、私は各変数の微係数を別々に計算することができましたが、これを行うベクトル化された演算がありますか? iに対する

m=sympy.Matrix(sympy.symbols('a b c d')) 

今例えば

= 0..3私が行うことができます。

sympy.diff(np.sum(m*m.T),m[i]) 

働くであろうが、私はむしろような何か:

sympy.diff(np.sum(m*m.T),m) 

をどちらが動作しないか( "AttributeError:ImmutableMatrixには属性_diff_wrtがありません")

+0

これは、「m」を変数とした派生物を変数として取ることを期待しているため、これはうまくいきません。 'm 'を超えてリストの理解度を使うだけです。 – asmeurer

答えて

6

だけm上でリストの内包を使用します。

[sympy.diff(sum(m*m.T), i) for i in m] 

また、あなたが数値で作業している場合を除きnp.sumを使用しないでください。組み込みのsumが良いです。

0

ここは@asmeurerの代替です。私はPythonリストの代わりにSymPyオブジェクトを返すので、この方法が好きです。

関連する問題