sympy - 使用 sympy 使用条件语句对函数进行 Lambda 化
问题描述
我试图对这个函数进行lambdify
def f(x):
if ceil(x)%2 == 0:
return -1
else :
return +1
a = sympy.lambdify(x,f(x))
当我尝试这样做时出现错误。我也尝试了分段,但它没有给我想要的结果
y = lambdify(x,(Piecewise((1, ceil(x)%2 == 0), (-1,True))))
请帮助提前谢谢
解决方案
您需要将符号表达式传递给,lambdify
因此 Python 函数并不好。此外,您还需要使用符号 sympy 函数,并且 sympy 的 ceil 函数实际上被称为ceiling
. 最后==
比较两个表达式是否相同,这与构造符号布尔值不同。为此,您需要Eq
:
In [19]: p = Piecewise((1, Eq(ceiling(x)%2, 0)), (-1,True))
In [20]: p
Out[20]:
⎧1 for ⌈x⌉ mod 2 = 0
⎨
⎩-1 otherwise
In [21]: y = lambdify(x, p)
In [22]: y([1, 2, 3])
Out[22]: array([-1., 1., -1.])
参考:
https://docs.sympy.org/latest/modules/functions/elementary.html#ceiling https://docs.sympy.org/latest/tutorial/gotchas.html#equals-signs
推荐阅读
- javascript - 在 ios 中从 Webview 更改字体
- python - 使用 numpy 查找每个 bin 的索引
- windows - 如何解决 .bat 文件上的“启动”错误命令
- kubernetes - 如何创建只能访问 Kubernetes 中特定命名空间的 linux 系统帐户?
- spring - 使用百里香叶和弹簧靴看不到图像
- r - R 中的自动化:如何将单个进程应用于不同的列
- apache-spark - Spark 执行器类每次创建新的序列化程序
- c++ - 无法将 int 应用于 partial_apply 的结果
- python - 如何在Python中多次复制位列表,反之亦然
- reactjs - 如何命名以反应路线以在链接中使用它?