python - 向 sympy 符号变量添加一个新字段

标签 python sympy

我有一个 SymPy 符号变量:

from sympy import symbols 
x=symbols('x')

如何向符号变量 x 添加新字段?

x.New_Field=Arbitrary_Value

最佳答案

不能动态地将属性添加到Symbol

这很可能是个坏主意,因为 SymPy 假定它可以替换比较相等的表达式。因此,如果您创建了两个符号并将一个属性动态存储在一个符号中(假设这是可能的)

a1 = Symbol('a') 
a2 = Symbol('a') 
a1.something = 0 

然后 SymPy 会随意交换 a1a2,因为它们比较相等(a1 == a2 ),这肯定会产生意想不到的后果。

如果你看一下 source code ,你可以看到 Symbol 出于性能原因在其类中定义了 __slots__,这有效地告诉解释器“这些都是此类中的实例属性”。这就是为什么您不能向Symbol 动态添加属性。

一个可能的替代方法是创建一个 Symbol 的子类,将您想要的属性存储在它的 args 中,这样它们就会被考虑到您的子类对象的相等性比较中.


有关我在此处稍微解释的主题的扩展讨论,请参阅 Google 线程:How to equip a Symbol with an additional attribute?

关于python - 向 sympy 符号变量添加一个新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449055/

相关文章:

python - 在 matplotlib/python 中绘制多条曲线

python - Sympy 有理数 - 表达 (x + 3 )**6/6

python-3.x - 如何用 sympy 声明自然符号?

python - SymPy:如果等式在列表中,为什么 `solve` 有时会失败?

python - 编辑: Namespaces,和异常处理

用于计算任意多面体的表面积和体积的Python库

python - 如何使用matplotlib将节点数一一相加然后显示

python - OpenAI gym 和 Python 线程

python - 如何将列表装置作为参数传递给 pytest.parametrize?

python - 替换 Sympy 中的组合函数