es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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! 🙂

Tags:  , , , ,

Answer

  1. Avatar for 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.

Comments are closed.