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 

をしかし、私は1で、アレイ1の値を渡した場合、それは動作します:

parser.parse('sin(x)').evaluate({'x':a[0]}) 
0.8414709848078965 

答えて

1

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

COSとThanks..Works、日焼け、ASIN、ACOS、ATAN、ログ、切り上げ、床、ラウンド、EXP機能np.sin作品でそれを置き換えます。今問題は '^'です。これはmath.pow関数を使って実装されています。 np.powerで置き換えることはできません。 – inxp

+0

'^'の解を追加しました。 –

+0

whoa ....ありがとう....私はops2を使用していたことは確かです...それは昨日働いていませんでした....しかし、今それは働いています... :) – inxp

関連する問題