Python (SymPy, SciPy), создание лямбда-символа из строки - PullRequest
3 голосов
/ 03 мая 2011

Я изо всех сил пытался взять ввод текста уравнения и оценить его как определенный интеграл. Мне нужна вызываемая функция, чтобы перейти к scipy.integrate.

eq = "x**2"
func = lambda x: eq
func(2)

# outputs:
# x**2


# but if I:

func = lambda x: x**2
func(2)

# outputs:
# 4

Ответы [ 5 ]

5 голосов
/ 03 мая 2011

Не уверен, но, возможно, вы ищете

eq = "x**2"
func = eval("lambda x: " + eq)

Обратите внимание, что использование eval() опасно, если eq из ненадежного источника (например, пользовательский ввод).

2 голосов
/ 12 августа 2011

sympify может быть тем, что вы ищете.Он преобразует строковое выражение в объект sympy.

Например:

import sympy as sp
f=sp.sympify('x**2+sin(y)')

И вы можете использовать autowrap для преобразования объекта sympy в вызываемую функцию.

2 голосов
/ 03 мая 2011

Вам нужно использовать eval для запуска eq как кода, а не обрабатывать его как строку.

eq = "x**2"
func = lambda x: eval(eq)
func(2)

# outputs:
# 4
1 голос
/ 07 августа 2013

Попробуйте asteval или Numberxpr , чтобы найти более безопасные альтернативы eval () и Sympy.sympify (). Evalf ().

0 голосов
/ 16 июля 2017

Я постоянно получал синтаксическую ошибку для следующего и неустанно пытался выяснить, почему:

E="2x+1"
F=lambda x: (x, eval(E)) # to get an xy coordinate 

Но проблема сработала, как и ожидалось, когда я изменил E на:

E="2*x+1"

Ошибка новичка. :)

...