sympyを使用して式を作成し、sympy.init_printing()
というラテックスとして表示しています。この式は、f
という名前の関数にlambdifiedされた後の計算で使用されます。式にsympyオブジェクトが含まれている場合、Lambdifyの式は配列とともに使用するとTypeErrorを発生させます。
しかし、配列Series
のオブジェクトをf
の引数として使用する場合、暗黙の式にsympyオブジェクト(たとえばsympy.sqrt()
)が含まれていると、TypeErrorが発生します。 sqrt
の代わりに**.5
を使用した場合、エラーは表示されません(ただし、IPythonではルートが表示されません)。
質問:
がどのように私はsympy.lambdify()
を通じて作成した関数に配列やSeries
を使用することができますか?
:これはかなりのルートになり
import sympy
import numpy
sympy.init_printing()
x = sympy.symbols('x')
_f = lambda x: sympy.sqrt(x)
f = sympy.lambdify(x, _f(x), (sympy, numpy))
f(x)
:
次のコードでは、(単純化)問題のデモです
import pandas
df = pandas.DataFrame([1,2,3], columns=['a'])
f(df['a'])
私が手:"numpy"
で
TypeError Traceback (most recent call last)
/home/gold/venvs/venv_python3.5/lib/python3.5/site-packages/sympy/core/cache.py in wrapper(*args, **kwargs)
92 try:
---> 93 retval = cfunc(*args, **kwargs)
94 except TypeError:
/home/gold/venvs/venv_python3.5/lib/python3.5/site-packages/pandas/core/generic.py in __hash__(self)
830 raise TypeError('{0!r} objects are mutable, thus they cannot be'
--> 831 ' hashed'.format(self.__class__.__name__))
832
TypeError: 'Series' objects are mutable, thus they cannot be hashed
During handling of the above exception, another exception occurred:
SympifyError Traceback (most recent call last)
<ipython-input-25-d0ba59fbbc02> in <module>()
2 df = pandas.DataFrame([1,2,3], columns=['a'])
3
----> 4 f(df['a'])
/home/gold/venvs/venv_python3.5/lib/python3.5/site-packages/sympy/__init__.py in <lambda>(_Dummy_21)
/home/gold/venvs/venv_python3.5/lib/python3.5/site-packages/sympy/functions/elementary/miscellaneous.py in sqrt(arg)
113 """
114 # arg = sympify(arg) is handled by Pow
--> 115 return Pow(arg, S.Half)
116
117
/home/gold/venvs/venv_python3.5/lib/python3.5/site-packages/sympy/core/cache.py in wrapper(*args, **kwargs)
93 retval = cfunc(*args, **kwargs)
94 except TypeError:
---> 95 retval = func(*args, **kwargs)
96 return retval
97
/home/gold/venvs/venv_python3.5/lib/python3.5/site-packages/sympy/core/power.py in __new__(cls, b, e, evaluate)
168 from sympy.functions.elementary.exponential import exp_polar
169
--> 170 b = _sympify(b)
171 e = _sympify(e)
172 if evaluate:
/home/gold/venvs/venv_python3.5/lib/python3.5/site-packages/sympy/core/sympify.py in _sympify(a)
353
354 """
--> 355 return sympify(a, strict=True)
356
357
/home/gold/venvs/venv_python3.5/lib/python3.5/site-packages/sympy/core/sympify.py in sympify(a, locals, convert_xor, strict, rational, evaluate)
275
276 if strict:
--> 277 raise SympifyError(a)
278
279 if iterable(a):
SympifyError: SympifyError: 0 1
1 2
2 3
Name: a, dtype: int64
'df ['a']。values'は' df'から派生したnumpy配列です。 'sympy'がそれを処理できるより良いチャンスがあります。 – hpaulj
@hpauljまだエラーが発生しています: 'TypeError:unhashable type: 'numpy.ndarray'' –
次に、' sympy'ドキュメントを掘り下げる必要があります。 – hpaulj