我希望能够获得一个Indexed对象,用值代替它的索引,但仍然记得它的原始索引。
from sympy.tensor import IndexedBase, Idx
C = IndexedBase("C")
i,j = Idx("i"), Idx("j")
expr = C[i,j]
expr = expr.subs({i:1, j:2})
有可能从expr中获得原始索引(i,j)吗?由于表达式是不可变的,所以我对原始表达式所做的任何修改都不会显示在新表达式中。
我想这里的一般问题是如何将附加信息附加到Sympy符号上。
您可以将常规信息附加到像symbols('x', integer=True)
这样的符号,但不能赋值。但是,您可以使用替换的符号创建新的变量。这使您的原始表达式保持不变:
newexpr = expr.subs({i:1, j:2})
SymPy在执行subs
后不会"记住"事物的来源。您应该构造代码,以便保留原始表达式。