numpy: инвертирование верхней треугольной матрицы

Каков канонический способ вычисления обратной верхней треугольной матрицы в numpy/scipy?

Матрица хранится в виде двумерного массива numpy с нулевыми субдиагональными элементами, и результат также должен храниться в виде двумерного массива.

редактировать Лучшее, что я нашел, это scipy.linalg.solve_triangular(A, np.identity(n)). Это оно?


person NPE    schedule 18.05.2011    source источник
comment
Насколько велика треугольная матрица? На моей машине простой numpy.linalg.inv быстрее, чем solve_triangular для матриц размером примерно до 40x40.   -  person amcnabb    schedule 14.06.2013
comment
@NPE Любое обновление? Также вы заметили какие-либо проблемы с вызовом вышеуказанного (*TRTRS)? Моя матрица достаточно мала, я могу просто написать обратную замену для обратной, но хотел бы избежать, если это возможно.   -  person Daniel    schedule 05.07.2016


Ответы (1)


Процедуры инверсии, как таковой, на самом деле не существует. scipy.linalg.solve — это канонический способ решения матрично-векторного или матрично-матричного уравнения, и ему может быть предоставлена ​​явная информация о структуре матрицы, которую он будет использовать для выбора правильной процедуры (вероятно, эквивалент BLAS3 dtrsm в этом случае) .

LAPACK включает doptri для этой цели, а scipy.linalg предоставляет необработанный интерфейс C lapack. Если обратная матрица действительно вам нужна, вы можете попробовать использовать ее.

person talonmies    schedule 18.05.2011
comment
Вам действительно нужна перевернутая матрица? Маршрут LAPACK является лучшим, если вам действительно нужно его инвертировать. В противном случае linalg.solve делает довольно приличную работу, используя LAPACK для решения линейной системы. - person Ivan; 18.05.2011
comment
Будет ли doptri правильной рутиной? Если я правильно понимаю, op указывает на ортогональную матрицу. Поскольку у плаката треугольная матрица, не должно ли это быть tp или tr? Я не эксперт по LAPACK — моя информация взята с: en.wikipedia.org/wiki/LAPACK< /а> - person amcnabb; 14.06.2013
comment
Отличный указатель, но dtrtri, возможно, правильный, как в scipy.linalg.lapack.clapack.dtrtri - person dashesy; 28.07.2013
comment
@dashesy DTRTRI действительно правильный ответ на этот вопрос и должен быть более заметным. - person Daniel; 05.07.2016