2016-04-19 12 views
7

sympyを使用して2つのベクトル/行列式を計算するスクリプトをPythonで作成しました。ベクトルのtranposeを含む式をlambdifyで数値関数に変換する

リテラルスキャンした文字列はここので、同じエラーを持ついくつかのコードですがEOL:私はsympy.lambdifyで評価できる機能にそれらを変換しようとすると、しかし、私は

にSyntaxErrorを取得しますあなたは私が何を意味するかを見ることができます。

import sympy 
x = sympy.MatrixSymbol('x',3,1) 
f = sympy.lambdify(x, x.T*x) 

ので、構文エラーが表現「x'.dot(X)」と「への「.T」の変換に関係しています。

上記のlambdifyからfを正しく定義するにはどうすればよいですか?

+2

これらの種類のものは、SymPyの問題追跡ツールに報告してください。私はこのためにhttps://github.com/sympy/sympy/issues/11044を開いた。 – asmeurer

+0

@asmeurerええ、私はそれを念頭に置いておきます。ありがとう! – Konstantinos

答えて

2

最もクリーンな解決策ではありませんが、回避策が見つかりましたが、機能します。

sympyからimplement_function()メソッドを使用して関数を定義します。完全なドキュメントをここに読む:ここhttp://docs.sympy.org/latest/modules/utilities/lambdify.html

はコードです:

import sympy 
import numpy as np 
from sympy.utilities.lambdify import implemented_function 


x = sympy.MatrixSymbol('x',3,1) 

f = implemented_function(sympy.Function('f'), lambda x: x.T*x) 

lam_f= sympy.lambdify(x, f(x)) 

・ホープこれはあなたの問題を解決:)

+1

評価のために実際に 'np.dot'を使うものを定義したいと思うでしょう。 – asmeurer

+0

ええ、これは単に要素ごとの乗算です。 – Konstantinos

0

それは> = 1.1

編集sympyバージョンで解決されています

この x = sympy.MatrixSymbol('x',3,1) あなたはそのインデックスをチェックして、 print(sympy.Matrix(x))

を使用して形作ることができ、

をマトリックスを作成している今、あなたはXにXの転置を乗算することを、あなたはxに同じの行列を与える必要がありますあなたはこの李を確認することができます

from sympy import MatrixSymbol, lambdify, Matrix 
x = MatrixSymbol('x', 3, 1) 
f = lambdify(x, x.T*x) 
a = Matrix([[1], [2], [3]]) 
print(f(a)) 

:あなたがここに

前に定義されている形状はこれを試してみてくださいhttp://docs.sympy.org/latest/modules/utilities/lambdify.html

+0

ありがとうございます。私は 'f = sympy.lambdify(x、x.T * x)'がエラーを投げていないことを知っています。しかし、この 'f'をどのように使うことができるかの例を追加することができますか?これは、あなたの答えをもっと重要なものにします。 – FTP

+0

私は投稿を編集しました。例を見ることができます。 –

+0

あなたのシステムにnumpyがインストールされていれば、関連性があるかどうかわかりません。 14]。 –

関連する問題