gpt4 book ai didi

python - `S` 在 sympy 中表示什么

转载 作者:太空狗 更新时间:2023-10-29 22:10:32 25 4
gpt4 key购买 nike

我是sympy的新手,我不懂

from sympy.core import S

S 究竟是什么? S.true 是什么意思?

最佳答案

有一点困惑,因为 S 实际上是两个东西。

首先是 SingletonRegistrySymPy 中的几个类经常出现以致于它们被单例化,也就是说,使用一些元编程使它们只能被实例化一次。例如,每次创建 Integer(0) 时,都会返回相同的实例 Zero。所有单例实例都是 S 对象的属性,因此 Integer(0) 也可以作为 S.Zero 访问。

单例化有两个优点:节省内存,允许快速比较。它节省内存,因为无论单例对象在内存中的表达式中出现多少次,它们都指向内存中的同一个单个实例。快速比较是因为您可以使用 is 来比较 Python 中的确切实例(通常,您需要使用 == 来比较事物)。因此,您可以测试 a is S.Zero 以检查 a 是否为 Integer(0) 实例。

在大多数情况下,某些对象是单例化的这一事实是您无需担心的实现细节。 S 对最终用户的主要优势是可以方便地访问某些难以键入的实例,例如 S.Half(而不是 Rational(1, 2)) 或 S.true(旁注:S.trueTrue 的 SymPy 版本。不同于 True,它不是 int 的子类,所以你可以写类似 ~S.true 的东西(不是真的),它会给出 S .false(与 ~True 对比,它给出 -2,它不是 bool 值 false)。

第二件事是 sympify 的快捷方式。 sympify 是转换 Python 对象的函数,例如 int( 1) 为 SymPy 对象,例如 Integer(1)。它还将表达式的字符串形式转换为 SymPy 表达式,如 sympify(x**2) -> Symbol("x")**2S(1)sympify(1) 相同(基本上,S.__call__ 已被定义为调用 sympify)。

这是为了方便,因为 S 是一个字母。它主要用于定义有理数。考虑像 x + 1/2 这样的表达式。如果您直接在 Python 中输入它,它将评估 1/2 并给出 0.5(或者在 Python 2 中只是 0,因为整数除法),因为两个参数都是 int。但是,在 SymPy 中,您通常希望两个整数的商给出一个精确的有理数。 Python 的评估工作方式,运算符的至少一侧需要是 SymPy 对象,SymPy 评估才能接管。您可以将其写成 x + Rational(1, 2),但这要输入更多内容。一个较短的版本是 x + S(1)/2。由于 S(1) 返回 Integer(1),除法将返回 Rational 类型,因为它将调用 Integer.__div__ ,它知道如何返回一个 Rational

关于python - `S` 在 sympy 中表示什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com