在 sympy sum 中获取索引项的使用索引

Getting used indices of indexed terms in a sympy sum

假设我有变量 xy 被索引

from sympy.tensor import IndexedBase
x = IndexedBase('x')`

我有一个像 e = x[1] y[2] + x[5] y[10] 这样的表达 .我想找到每个 xy 使用的所有索引。我正在寻找一个可能像这样工作的函数:e.indices(y) = [2, 10]e.indicies(x) = [1, 5]

有什么方法可以遍历术语 x[i] y[j]?如果是这样,是否有办法将产品拆分为多个术语,并为每个术语找出正在使用的字母和出现的索引?

以下应该让您朝着正确的方向前进:

>>> from sympy.tensor import IndexedBase, Indexed
>>> from sympy import sift
>>> x = IndexedBase('x')
>>> y = IndexedBase('y')
>>> e = x[1]* y[2] + x[5]* y[10]
>>> e.atoms(IndexedBase)
set([y, x])
>>> e.atoms(Indexed)
set([x[5], y[10], x[1], y[2]])
>>> sifted = sift(_,lambda i: i.base)
>>> sifted[x]
[x[5], x[1]]
>>> sifted[y]
[y[10], y[2]]
>>> [i.indices for i in _]
[(10,), (2,)]
>>> flatten(_)
[10, 2]