2015-02-20 2 views
0

Я хочу иметь возможность индексировать объект, подставлять значения его индексов, но при этом помнить его исходные индексы.Сохранение исходных индексов в индексированных объектах Sympy

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}) 

Возможно ли получить исходные индексы (i, j) из выражения expr? Поскольку выражения неизменяемы, любые модификации, которые я делаю в исходном выражении, не будут отображаться в новом выражении.

Я полагаю, что общий вопрос здесь заключается в том, как добавить дополнительную информацию к символам Sympy.

ответ

0

Вы можете приложить общую информацию к таким символам, как symbols('x', integer=True), но вы не можете назначать значения. Однако вы можете создавать новые переменные с замещаемыми символами. Это оставляет исходное выражение без изменений:

newexpr = expr.subs({i:1, j:2}) 
+0

Спасибо за ваш ответ. Однако я не уверен, отвечает ли этот вопрос на этот вопрос. Обратите внимание, что в моем коде я хочу получить '(i, j)' из _final_ 'expr', который теперь равен' C [1,1] '. Я хочу, чтобы объект Indexed смог запомнить, каковы его исходные индексы. – woggy

+0

Для чего нужна эта информация? Как бы вы использовали эту информацию? – smichr

+0

Из одного выражения я генерирую целую связку на основе диапазонов индексов. например 'A [i, j]' может стать '[A [1,1], A [1,2], A [1,3] ...]'. Затем я применяю преобразования к парам индексов, обычно сопоставляя две соседние пары до единицы. Например, преобразуйте '(i, j)' в соответствии с правилом, в котором указано, где значения '1,1' сводятся к одному индексу' 1'. Итак, 'A [1,1]' становится 'A [1]'. Только один пример. – woggy

0

SymPy не «помнит», где вещи происходят из после выполнения subs. Вы должны структурировать свой код, чтобы исходное выражение сохранялось.

Смежные вопросы