2016-12-18 4 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 подключен к 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]) 
+0

Thanks..Works с соз, загар, ASIN, экоса, Атан, бревенчатый, CEIL, пол, круглые, EXP функции также , Теперь только проблема - это «^», которая реализуется с использованием функции math.pow. Замена np.power не работает. – inxp

+0

Добавлено решение для '^'. –

+0

whoa .... Спасибо .... Я был уверен, что использовал ops2 ... Вчера он не работал ... Но теперь он работает ... :) – inxp

 Смежные вопросы

  • Нет связанных вопросов^_^