xticks barplot python parsing equation

python - barplot - pandas plot



Análisis de ecuación en Python (7)

De acuerdo con vartec. Yo usaría SymPy, en particular, la función lambdify debería hacer exactamente lo que usted quiere.

Ver: http://showmedo.com/videotutorials/video?name=7200080&fromSeriesID=720

para una muy buena explicación de esto.

Los mejores deseos,

¿Cómo puedo (fácilmente) tomar una cadena como "sin(x)*x^2" que podría ser ingresada por un usuario en tiempo de ejecución y producir una función de Python que podría evaluarse para cualquier valor de x ?


El propio compilador interno de Python puede analizar esto, si usas la notación de Python.

Si cambias ligeramente la notación, serás más feliz.

import compiler eq= "sin(x)*x**2" ast= compiler.parse( eq )

Obtiene un árbol de sintaxis abstracto con el que puede trabajar.


Para enfatizar el consejo de JF Sebastian, ''eval'' e incluso las soluciones de ''compilador'' pueden estar abiertas a sutiles problemas de seguridad. ¿Qué tan confiable es la entrada? Con ''compilador'' al menos puedes filtrar cosas como búsquedas getattr del AST, pero he descubierto que es más fácil usar PLY o pyparsing para este tipo de cosas que asegurar el resultado de dejar que Python te ayude.

Además, ''compilador'' es torpe y difícil de usar. Está en desuso y eliminado en 3.0. Debe usar el módulo ''ast'' (agregado en 2.6, disponible en 2.5 como ''_ast'').


Puedes usar el parser Python:

import parser formula = "sin(x)*x**2" code = parser.expr(formula).compile() from math import sin x = 10 print eval(code)

Funciona mejor que la eval pura y, por supuesto, evita la inyección de código.



Sage está pensado como reemplazo de matlab y en los videos introductorios se demuestra cómo se manejan casos similares a los tuyos. Parecen apoyar una amplia gama de enfoques. Como el código es de código abierto, puede navegar y ver por usted mismo cómo manejan los autores dichos casos.


f = parser.parse(''sin(x)*x^2'').to_pyfunc()

Donde el parser podría definirse usando PLY, pyparsing, tokenizer incorporado, analizador, ast.

No use eval en la entrada del usuario.