2017-03-31 1 views
-1

Je voudrais évaluer une expression symbolique sur un meshgrid. Mon TestCode est la suivante:évaluer l'expression symbolique sur meshgrind en python

import sympy as sym 
import numpy as np 

x,y = sym.symbols('x,y') 
test = sym.gamma(x)/sym.sqrt(y) 

X = np.linspace(start = 1, stop = 2) 
Y = np.linspace(start = 4, stop = 7) 

X, Y = np.meshgrid(X, Y) 

Z = test.evalf(subs = {x : X, y: Y}) 

Il semble que tente de python pour créer un objet avec beaucoup de dimensions, ce qui est tout à fait pas ce que je pense. Y at-il un moyen de le faire sans boucles sur les arguments de la fonction?

Meilleur

Répondre

0

Comme vous êtes intéressé par des évaluations numériques, l'utilisation de sympy ne vous offre aucun avantage par rapport à numpy/scipy dont les fonctions peuvent également être appliquées à tous les éléments d'un ndarray via un seul appel.

from scipy.special import gamma 
from numpy import sqrt 

test = lambda x, y: gamma(x)/sqrt(y) 

Z = text(X, Y) 
+0

Merci pour votre réponse. C'était juste un exemple simple. Je suppose, j'ai besoin du paquetage sympi car les expressions qui seront évaluées sont plutôt longues et réarrangées avant d'être évaluées. L'utilisation de la fonction lambda ci-dessus produit la même erreur qu'avant. – Daniel

+0

@Daniel Si vous êtes limité à sympy, alors ce que vous essayez de faire n'a aucun sens (sympy!) Car 'x' est déclaré comme symbole (scalaire) et vous essayez de le remplacer par une matrice numpy. Vous devez utiliser une boucle 'for' pour parcourir chaque paire d'éléments de' X', 'Y' et évaluer l'expression. Une autre approche que vous pourriez vouloir essayer est d'utiliser 'sympy.lambdify' pour convertir l'expression sympy en une expression numpy. – Stelios