2015-01-12 3 views
0

Скажем, у меня есть переменные x и y, которые индексируютсяПривыкание индексов индексированных терминов в SymPy сумму

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

И у меня есть выражение, как e = x[1] y[2] + x[5] y[10] . Я хочу найти все индексы, используемые каждым из x и y. Я ищу функцию, которая может работать следующим образом: e.indices(y) = [2, 10] и e.indicies(x) = [1, 5]

Есть ли способ, которым я могу перебирать термины x[i] y[j]? И если да, есть ли способ разделить продукт на термины и для каждого из них вытащить, какая буква используется и какой индекс появляется?

ответ

1

Следующая должны получить вы движетесь в правильном направлении:

>>> 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] 
+0

Я думаю, что вы забыли импортировать 'Indexed', но спасибо, я постараюсь это – Mark

+0

Ох, и я смотрел на' sift' и который находится в 'sympy.utilities.iterables.sift' – Mark

+0

(я добавил те, что выше, для потомков.) – smichr