考虑以下因素:
import sympy
from sympy import *
x = IndexedBase('x')
i = Symbol('i', integer=True)
z = x[i] + x[i+1] + x[i+2]
print z
x[i+1] = 2 # <-- problem
print z
在“x[i+1] = 2”处,我遇到“TypeError:'IndexedBase'对象不支持项目分配” 我希望允许更新 x[i+1] 的符号值,并让“print z”给我更新的符号值。对我来说,替换 z 中的 x[i+1] 项是不够的,因为可能有其他表达式使用相同的 x[i+1] 项,并且我希望它们也被更新。
由于 IndexedBase 不支持项目分配,建议使用哪些替代方案来代替 IndexedBase?
我使用 IndexedBase 是因为我想用符号引用来表示内存。
请让我知道如何重新表述我的问题和/或需要更好地帮助您帮助我。
最佳答案
SymPy 表达式不可变。如果您想更改它们,则需要使用像 subs
这样的函数来创建新表达式(例如 z2 = z.subs(x[i + 1], 2)
)。
关于python - IndexedBase 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052718/