python - py-expression-eval - 传递一个 numpy ndarray

python - py-expression-eval - Passing a numpy ndarray

我正在使用 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

看起来 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])