java - 对大矩阵(即 10,000 x 10,000)执行求逆

标签 java ojalgo

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

最佳答案

根据您想要对结果执行的操作,还有其他方法可以解决您的问题,但不涉及矩阵求逆

假设你确实需要反转它,你可以做一些已经在 Mathematics Stack Exchange 上回答的事情:Inversion of large matrices

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

关于java - 对大矩阵(即 10,000 x 10,000)执行求逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55963703/

相关文章:

java - 如何从 Injectable 解析其调用者类?

java - Spring Boot 用户注册 - 将验证错误发送到 UI

java - 在 Java 中存储未知数量的字符串的最快方法是什么?

java - ojalgo 中的 QR/SVD 分解是否需要与列一样多的行?

java - 如何使用 ojAlgo 解决 Java 中的二次规划 (QP)?

java - 如何选择目录中的上一张或下一张图像?

java图形用户界面和逻辑