- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 sympy 创建一个表达式,然后用 sympy.init_printing()
显示为 latex .该表达式在被 lambdified 为名为 f
的函数后用于计算。
但是,当使用数组或 Series
对象作为 f
的参数时,如果 lambdified 表达式包含一个 sympy 对象(例如 sympy.sqrt()
)。如果我使用 **.5
而不是 sqrt
我不会得到任何错误(但它不会在 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'])
我得到:
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
最佳答案
与 "numpy"
,这有效:
In [845]: df=pd.DataFrame([1,2,3], columns=['a'])
In [846]: arr=np.array([1,2,3])
In [847]: f = sympy.lambdify(x, sympy.sqrt(x),"numpy")
In [849]: f(arr)
Out[849]: array([ 1. , 1.41421356, 1.73205081])
In [850]: f(df)
Out[850]:
a
0 1.000000
1 1.414214
2 1.732051
但 sympy 替代品不会:
In [851]: f(x)
...
AttributeError: 'Symbol' object has no attribute 'sqrt'
我没研究过lambdify
文档足以知道我是否可以在一个函数中同时工作。
f = sympy.lambdify(x, sympy.sqrt(x),modules=("sympy", "numpy"))
处理 sympy
但不是 numpy
参数。
好像没有指定modules
应与 modules = ["math", "mpmath", "sympy", "numpy"]
相同.
带有运算符的表达式工作得很好,甚至可以组合符号和数组:
In [926]: f = sympy.lambdify((x,y), x+y, ("numpy","sympy"))
In [927]: f(x,y)
Out[927]: x + y
In [928]: f(arr,arr)
Out[928]: array([2, 4, 6])
In [929]: f(arr,x)
Out[929]: array([x + 1, x + 2, x + 3], dtype=object)
我可能还没有发现任何你还没有发现的东西。
关于python - 如果表达式包含 sympy 对象,则 Lambdify 表达式在与数组一起使用时引发 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41315237/
在下面的程序中,SymPy 似乎不理解被积函数是乘积的导数。有没有办法让它返回u*v ? import sympy x = sympy.symbols('x', real=True) u = symp
我有两个单变量函数,f(x)和 g(x) ,我想替换 g(x) = y重写 f(x)正如一些 f2(y) . 这是一个有效的简单示例: In [240]: x = Symbol('x') In [24
我需要以字符串的形式接受用户输入,将其解析为一个 sympy 表达式,然后求解一个变量。大多数用户允许的函数与 sympy 函数匹配,除了 log2(x) 等同于 sympy 的 log(x, 2)。
当 Function 出现在方程中或者是要求解的目标时,sympy 的 solve 函数似乎无法求解某些方程。 为了解决这个问题,我想创建一个通用函数,它会自动用同名的 Symbol 替换表达式中的
尽管 radsimp函数看起来正是我想要的: from sympy import radsimp, sqrt, symbols v1, v2 = symbols('v1 v2') radsimp(1
在动态系统中,我的基值都是时间的函数,d(t)。我使用 d = Function('d')(t) 创建变量 d,其中 t = S('t') 显然,d 的导数(变化率,如速度等)很常见。但是 diff(
我有各种涉及 UndefinedFunction 实例的 SymPy 表达式: f = Function('f') g = Function('g') e = f(x) / g(x) 如何获取出现在此
我试图使用 sympy 解决斐波那契数列的递推关系。我得到了一个与教科书不同的答案。不知道我哪里弄错了。 我的同情码 from sympy import * f=Function('f') var('
我设置了 Anaconda 2.0.0 (Win 64)。 它有 SymPy 0.7.5。 我将 Spyder(Anaconda 附带的 2.3.0rc)配置为使用符号数学: 工具 > 首选项 > i
我是 sympy 的新手,并且正在学习它。我正在浏览堆栈交换中关于使用 sympy 符号求解具有初始条件的微分方程组的文档和问题。 我有一个简单的 ODE-s 系统 ( dV/dt ) = -(
x,i,n = symbols("x i n") summation(x,(i,1,n)) 我如何制作 x由 i 索引? 最佳答案 没有数字上限,它不会做任何事情,但除此之外,您可以使用类似函数的表达
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
我正在尝试在 Jupyter 笔记本中使用 sympy 以可重复的方式记录和执行一系列数学计算。 如果我定义以下内容: from sympy import * init_printing() x, y
当我打字时 >python > from sympy import * > x=symbols('x') > integrate(1/4/sin(1/3*x),x) 输出是 0.375*log(cos
如果我们知道变量满足某个方程,是否可以简化 SymPy 中的表达式?例如,在 Mathematica 中我们可以这样写: Simplify[a+b-c, a+b==c] 当然,在这种情况下可以解决 a
在 sympy 中,如何声明一个对子函数中的多个变量具有多个限制的 Piecewise 函数? 这是我的背景和尝试: from sympy import Piecewise, Symbol, exp
我想使用 sympy 求解以下简单方程 2^(x-y)=1 其中 x 和 y 是 +ve 整数 我的预期结果是 x=y 当我尝试使用 sympy 求解时 x = Symbol('x') y = Sym
我有一个表达式列表,例如 4.0*x[0] + 5.0*x[10] + 1 = 0我想根据 [4.0, 0, 0, ..., 5.0, ... , 1] 等系数将它们转换为向量。原因是我的一些方程可能
当我打字时 >python > from sympy import * > x=symbols('x') > integrate(1/4/sin(1/3*x),x) 输出是 0.375*log(cos
我想对 SU(2) 的一般矩阵进行计算,即我有一个 a,b=symbols('a,b') m=Matrix([[a,b],[-conjugate(b), conjugate(a)]]) 经过一些计算,
我是一名优秀的程序员,十分优秀!