¿Por qué numexpr.evaluate devuelve un error al usar funciones de mpmath?
Acabo de empezar a usar la función “evaluate” de numexpr y me encontré con un error molesto.
Quiero que imprima, por ejemplo, sin(10), y lo hace perfectamente, pero si escribo sec(10), obtengo el mensaje “TypeError: el objeto ‘VariableNode’ no es llamable”
Código de ejemplo:
import mpmath as mp
from numexpr import evaluate as ne
cos = mp.cos
sin = mp.sin
csc = mp.csc
sec = mp.sec
print(ne('cos(50)'))
>>> 0.9649660284921133
print(ne('sin(50)')
>>> -0.26237485370392877
print(ne('csc(50)')
>>> TypeError: el objeto 'VariableNode' no es llamable
print(ne('sec(50)')
>>> TypeError: el objeto 'VariableNode' no es llamable
Cuando uso “eval” en su lugar, devuelve los valores correctos, como debería.
¿Por qué ocurre esto? ¿Es porque numexpr es una expansión de numpy y obtiene automáticamente sus funciones de numpy (numpy no tiene sec, csc, cot) y, por lo tanto, no puede obtener funciones de mpmath?
¡Muchas gracias de antemano! 🙂
davy.ai
Es probable que el error ocurra porque numexpr no reconoce sec y csc como funciones válidas. Numexpr está diseñado principalmente para acelerar operaciones numéricas en arreglos de numpy y admite un conjunto limitado de funciones, que no incluye sec y csc. Cuando usas eval, este puede reconocer las funciones porque evalúa la expresión utilizando el motor de evaluación incorporado de Python, que puede acceder a cualquier función que esté actualmente en el ámbito, incluidas las funciones trigonométricas de mpmath.
Para usar sec y csc con numexpr, puedes intentar definir tus propias funciones personalizadas que imiten su comportamiento utilizando las funciones trigonométricas de mpmath, y luego usar esas funciones en tus expresiones de numexpr. Alternativamente, podrías seguir usando eval para estas funciones específicas.