#python #sympy
#python #sympy
Вопрос:
Когда я запускаю этот код
import sympy as sp
sp.init_printing(pretty_print=False)
I = sp.Identity(3)
A = sp.MatrixSymbol('A',3,3)
A*I
I*A
sp.adjoint(A)*I
I*sp.adjoint(A)
Я получаю ожидаемые результаты,
A
A
Adjoint(A)
Adjoint(A)
Однако, если я запущу
sp.adjoint(I)*A
Я получаю
Adjoint(I)*A
Почему Sympy не заменяет сопряженную (I) на I ?
Ответ №1:
Adjoint(MatrixExpr)
не вычисляется, это просто символический объект: https://github.com/sympy/sympy/blob/master/sympy/matrices/expressions/adjoint.py.
Поэтому я предполагаю, что sp.adjoint(I)
использует отложенную загрузку для любой матрицы, чтобы сэкономить на вычислениях, пока это действительно не понадобится. Как только функция вычисляется, сопряженная вычисляется и устанавливается в I.
Возможно, I.adjoint()
делает то, что вы ожидаете.