Я пишу некоторый код в python, который требует часто инвертирования больших квадратных матриц (100-200 строк/colums).альтернативы или ускорения для инверсии матрицы mpmath
Я нахожусь в пределе точности машины, поэтому начал использовать mpmath
, чтобы сделать инверсию матрицы произвольной точности, но она очень медленная, даже с использованием gmpy
.
Инвертирование случайных матриц размера 20, 30, 60 с точностью 30 (десятичная) занимает ~ 0,19, 0,60 и 4,61 секунды, тогда как те же операции в mathematica
составляют 0,0084, 0,015 и 0,055 секунды.
Это использование python3
и mpmath 0.17
(не уверен в версии gmpy) на машине с аркой. Я не уверен, почему mpmath настолько медленнее, но есть ли какая-либо библиотека с открытым исходным кодом, которая будет приближаться к скоростям, которым математика управляет для этого (ровно 1/2, как быстро было бы хорошо)?
Мне не нужна произвольная точность - 128 бит, вероятно, будет достаточно хорошим. Я также просто не понимаю, как mpmath может быть намного медленнее. Он должен использовать совершенно другой алгоритм инверсии матрицы. Чтобы быть конкретным, я использую M**-1
.
Есть ли способ заставить его использовать более быстрый алгоритм или ускорить его.
Вы используете матрицу, обратную для решения набора уравнений? Если это так, то есть более эффективные методы, которые явно не требуют обратного. Разложение LU я считаю немного более эффективным. – Stuart
Нет, я использую его в вариации проблемы линейного программирования, поэтому мне нужно обратное, чтобы явно определить функцию стоимости. На самом деле проблема заключается в том, что, поскольку стоимость получает очень малые точные обратные вызовы, может возникнуть множество проблем. но я думаю, что для 128-битной точности будет достаточно (по крайней мере, для моих текущих целей). – user2153813
Конечно, мне не нужен фактический обратный, но мне нужно, чтобы он умножался на некоторые другие матрицы. Таким образом, он не совсем аналогичен решению A.x = b, так как мне нужно A^-1 * b, а b - не вектор. Но, может быть, есть способ обобщить поиск таких решений для матриц? OTOH Мне нужно делать это много раз, поэтому было бы лучше найти обратный. – user2153813