当前位置:  开发笔记 > 编程语言 > 正文

什么"S"在同情中表示

如何解决《什么"S"在同情中表示》经验,为你挑选了1个好方法。

我是新手sympy,我无法弄清楚

from sympy.core import S

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



1> asmeurer..:

有一点混乱,因为S实际上是两件事.

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

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

在大多数情况下,某些对象是单例化的这一事实是一个您不必担心的实现细节.S最终用户的主要优点是可以方便地访问难以键入的某些实例,例如S.Half(而不是Rational(1, 2)),或者S.true(旁注:S.true是SymPy版本的True.不像True,它不是子类int,所以你可以写像~S.true(不是真的)这样的东西,它会给S.false(对比,~True给出-2,这不是作为布尔值的假).

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

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

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有