2016-12-18 1 views
1

표현식을 평가하기 위해 py-expression-eval 라이브러리를 사용하고 있습니다.python - py-expression-eval - numpy ndarray 전달

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 

답변

1

sin 것 같은데 하드 와이어 된입니다.. np.sin 작품으로 교체 :

parser.ops1['sin'] = np.sin 
parser.parse('sin(x)').evaluate({'x':a}) 

array([ 0.84147098, 0.90929743, 0.14112001]) 

운영자가 ops2에 있습니다 COS와

parser.ops2['^'] = np.power 
parser.parse('x^2').evaluate({'x':a}) 

array([1, 2, 3]) 
+0

Thanks..Works, 황갈색, ASIN는, ACOS는, ATAN, 또한, 천장을 만들다, 바닥, 라운드, 특급 기능 로그 . 이제 문제는 '^'뿐이며 math.pow 함수를 사용하여 구현됩니다. np.power로 교체하면 작동하지 않습니다. – inxp

+0

'^'에 대한 해결책을 추가했습니다. –

+0

와우 .... 고마워 .... 내가 작전 2를 사용했다는 것이 확실했다 ... 어제 작동하지 않았다. 그러나 지금은 일하고있다. :) – inxp