Выполнение инверсии на большой матрице (т.е. 10 000 x 10 000) - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь выполнить инверсию для матриц, размер которых превышает 10 000 x 10 000.

InverterTask<Double> matrixInverter = InverterTask.PRIMITIVE.make(storeM);
try{
       storeI = matrixInverter.invert(storeM);
 }catch (RecoverableCondition e){
       throw new RuntimeException(e);
 }

storeM - это матрица размером 10 000 x 10000.

Однако я столкнулся со следующей ошибкой:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.ojalgo.array.Primitive64Array.<init>(Primitive64Array.java:368)
at org.ojalgo.matrix.store.PrimitiveDenseStore.<init>(PrimitiveDenseStore.java:482)
at org.ojalgo.matrix.store.PrimitiveDenseStore$1.makeZero(PrimitiveDenseStore.java:255)
at org.ojalgo.matrix.store.PrimitiveDenseStore$1.makeZero(PrimitiveDenseStore.java:95)
at org.ojalgo.matrix.decomposition.GenericDecomposition.makeZero(GenericDecomposition.java:105)
at org.ojalgo.matrix.decomposition.InPlaceDecomposition.setInPlace(InPlaceDecomposition.java:83)
at org.ojalgo.matrix.decomposition.LUDecomposition.compute(LUDecomposition.java:266)
at org.ojalgo.matrix.decomposition.LUDecomposition.decompose(LUDecomposition.java:94)
at org.ojalgo.matrix.decomposition.LUDecomposition.invert(LUDecomposition.java:199)
at distlearn.Inversion.main(Inversion.java:46)

Какие еще методы я могу использовать в ojAlgo для выполнения такой задачи?

Редактировать: Я на самом деле хочу выполнить регрессию гребня ядра, используя двойную проблему. Это означает, что для набора данных из N записей мне может потребоваться выполнить инверсию матрицы NxN.

1 Ответ

0 голосов
/ 03 мая 2019

В зависимости от того, что вы хотите сделать с результатом, есть другие способы решения вашей проблемы, которые не включают инвертирование матрицы .

Предполагая, что вам действительно нужно инвертировать его, вы можете сделать что-то, как уже отвечали на Математическом стеке: Инверсия больших матриц

Это дает решение для выполнения инверсии "на месте" (оно выделяет некоторую временную память во время процесса, но говорят, что это намного меньше, чем нормальная операция инверсии должна была бы быть успешной)

...