Hier ist das umfangreiche SymPy-Package ein gutes Bindeglied:
Code: Alles auswählen
import numpy as np
from sympy.abc import x, y
from sympy.parsing.sympy_parser import parse_expr
from sympy.utilities.lambdify import lambdify
def make_func(string, symbols=(x,)):
return lambdify(symbols, parse_expr(string))
def main():
xs = np.linspace(0, 1, 5)
double = make_func('x*2')
print('Original:', xs)
print('Double:', double(xs))
print()
xs = np.linspace(0, 2, 3)
ys = np.linspace(2, 4, 3)
formula = '(x + 1) * (y + 2)'
f = make_func(formula, (x, y))
print('xs:', xs)
print('ys:', ys)
print('Formula:', formula)
print('->', f(xs, ys))
if __name__ == '__main__':
main()
Dies hat gegenüber der Lösung von MagBen den Vorteil, dass nicht beliebiger (Schad-)Code ausgeführt wird. Außerdem ist es flexibler in Bezug auf zusätzliche Symbole. Bringt einem zwar eine zusätzliche Abhängigkeit an, aber das ist bei wissenschaftlichen Anwendungsgebieten ja sowieso üblich.