我正在使用py-expression-eval库来评估表达式。
import numpy as np
from py_expression_eval import Parser
parser=Parser()
a = np.array([1,2,3])
parser.parse('x*5').evaluate({'x':a})
#Works and outputs
array([ 5., 10., 15.])
然而:
parser.parse('sin(x)').evaluate({'x':a})
抛出错误:
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
parser.parse('sin(x)').evaluate({'x':a})
File "C:\Python27\lib\site-packages\py_expression_eval\__init__.py", line 133, in evaluate
nstack.append(f(n1))
TypeError: only length-1 arrays can be converted to Python scalars
但是,如果我逐个传递数组的值,它就可以工作:
parser.parse('sin(x)').evaluate({'x':a[0]})
0.8414709848078965
答案 0 :(得分:1)
sin
看起来与math.sin
硬连线。用np.sin
代替它:
parser.ops1['sin'] = np.sin
parser.parse('sin(x)').evaluate({'x':a})
array([ 0.84147098, 0.90929743, 0.14112001])
运营商位于ops2
:
parser.ops2['^'] = np.power
parser.parse('x^2').evaluate({'x':a})
array([1, 2, 3])