私は、コードのこの部分があります:私を与える2つのnumpyの配列lamdify使用を追加 - パス表現を関数の引数として
import numpy as np
import sympy
from sympy import symbols
from sympy.utilities.autowrap import ufuncify
from sympy.utilities.lambdify import lambdify
def test(expr,a,b):
a_var, b_var = symbols("a b")
#f = ufuncify((a_var, b_var), expr, backend='numpy')
f = lambdify((a_var, b_var), expr, 'numpy')
return f(a_var, b_var)
a = np.array([2,3])
b = np.array([1,2])
expr = a + b
print(test(expr, a, b))
を:
../anaconda3/envs/python3/lib/python3.6/site-packages/sympy/core/sympify.py:282: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
rational=rational) for x in a])
File "<string>", line 1
lambda _Dummy_52,_Dummy_53: ([3 5])
SyntaxError: invalid syntax
私はufuncify使用する場合:
...
TypeError: unhashable type: 'numpy.ndarray'
During handling of the above exception, another exception occurred:
...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
================
data_a = np.array([2,3])
data_b = np.array([1,2])
expr = "data_a + data_b"
def test(expr,data_a, data_b):
a, b = symbols("data_a data_b")
expr = sympify(expr)
f = lambdify((a, b), expr, 'numpy')
return f(data_a, data_b)
と私は取っています:
[3 5]
をしかし、私はのように表現の使用を避けることができますどのように私が見つけた一つの解決策は、文字列のようexpr
を使用して、関数内sympify
を使用することです文字列?
私は、式と変数を関数の引数として渡す方法の例を教えていただけますか?私の例があるので、試してみるとエラーが出ます。式を文字列として使用するだけでは、 – George
あなたの例では、まずaシンボルとbシンボルを作成しています。私の例では、expr(式)とデータ(numpy配列)を引数として渡したいと思います。すべての関数に 'a_var、b_var = symbols(" ab ")'を持たなければなりません。それがはっきりしていることを望みます。 – George
@Georgeは私の更新された答えを見てください。 – asmeurer