2016-04-19 4 views
7

Ich habe ein Skript in Python geschrieben, das mit Sympy ein paar Vektor/Matrix-Formeln berechnet. Allerdings, wenn ich versuche, diese zu Funktionen konvertieren, die ich mit sympy.lambdify auswerten kann, erhalte ich eineKonvertieren von Ausdruck mit Transponierung von Vektor in numerische Funktion mit Lambdify

Syntax: EOL während String Scannen wörtlichen

Hier einige Codes mit dem gleichen Fehler ist, so dass du sehen kannst, was ich meine.

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

also der Syntaxfehler hat mit dem Ausdruck „x'.dot (x)“ und der Umwandlung von „.T“ zu‘tun.

Wie kann ich das umgehen, um f aus dem obigen Lambdify richtig zu definieren?

+2

Fühlen Sie sich frei, diese Art von Sachen zu den SymPy Problem Tracker zu melden. Ich habe https://github.com/sympy/sympy/issues/11044 dafür geöffnet. – asmeurer

+0

@asmeurer Ja, das werde ich mir merken. Vielen Dank! – Konstantinos

Antwort

2

Gefunden eine Arbeit, obwohl nicht die sauberste aussehende Lösung ... aber es funktioniert.

Verwenden Sie die implementierte_funktion() - Methode von sympy, um Ihre Funktion zu definieren. Lesen Sie die vollständige Dokumentation hier: http://docs.sympy.org/latest/modules/utilities/lambdify.html

Hier ist der Code:

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

Hope this löst Ihr Problem :)

+1

Wahrscheinlich möchten Sie etwas definieren, das 'np.dot' tatsächlich zur Auswertung verwendet. – asmeurer

+0

Ja, das macht nur elementweise Multiplikation. – Konstantinos

0

Es wurde in sympy Version gelöst> = 1,1

Edit:

Beispiel

wenn Sie definieren diese x = sympy.MatrixSymbol('x',3,1) Sie eine Matrix erstellen,

können Sie die Indizierung überprüfen und print(sympy.Matrix(x))

Jetzt mit gestalten, dass Sie Transponieren von x zu x multiplizieren möchten, müssen Sie x eine Matrix aus derselben geben Form, die Sie vor

hier versuchen, diese definiert haben:

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

Sie können diese li überprüfen nk out zu verstehen, Lambdify besser: http://docs.sympy.org/latest/modules/utilities/lambdify.html

+0

Danke für das Update. Ich sehe, dass 'f = sympy.lambdify (x, x.T * x)' jetzt keinen Fehler wirft. Aber könnten Sie ein Beispiel hinzufügen, wie man dieses "f" benutzen kann? Dies würde Ihre Antwort viel wertvoller machen. – FTP

+0

Ich habe den Beitrag bearbeitet, Sie können das Beispiel sehen :) –

+0

eine weitere Sache, ich weiß nicht, ob es für Sie relevant ist, immer noch, wenn Sie numpy auf Ihrem System installiert haben, erhalten Sie Ausgabe '14' sonst' [ 14] '. –

Verwandte Themen