0

我正在尝试对大于 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 10,000 的矩阵。

但是,我遇到了以下错误:

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 矩阵的求逆。

4

1 回答 1

0

根据您要对结果执行的操作,还有其他不涉及反转矩阵的方法来解决您的问题。

假设你真的需要反转它,你可以做一些数学堆栈交换已经回答的事情:大矩阵的反转

它提供了一种“就地”进行反转的解决方案(它确实在该过程中分配了一些临时内存,但据说它比正常的反转操作需要成功要少得多)

于 2019-05-03T06:03:00.257 回答