我正在使用 Hadoop/Mahout 分解将成为一个非常大的稀疏矩阵。问题是,我什至无法用 200 个非零值和尺寸 56000 x 56000 在一秒钟内用 Python 解决它。我有一个令人毛骨悚然的怀疑,即计算在某些时候变得密集!
我目前正在使用单节点/核心。这相关吗?所有操作都从 Java 文件运行,而不是从命令行运行。我得到的例外是老歌但好人:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apache.mahout.math.DenseMatrix.<init>(DenseMatrix.java:50)
at org.apache.mahout.math.solver.EigenDecomposition.<init>(EigenDecomposition.java:70)
at myhadoop.MyHadoop.main(MyHadoop.java:84)
Java 结果:1
自然,由于 Exceptions 引用了 DenseMatrix,我很担心。如果它以某种方式使用覆盖的方法,我可以不在乎,但如果正在写入实际的零,那就不好了。另外,我的程序运行得很慢。
编码:
SparseRowMatrix A = new SparseRowMatrix();
// Matrix A is then created by adding elements one by one in a
// somewhat ordered fashion.
B SparseRowMatrix = A;
B.transpose();
A.plus(B);
EigenDecomposition eigDec = new EigenDecomposition(A, true);
myEig = eigDec.getRealEigenvalues();
如果实际上不是,有关如何使其真正稀疏的任何想法?