我正在和Jama Matrix一起工作。我把它用在大规模集成电路上。它工作得很好。然而,当我传递一个像8000x8000这样的大矩阵时,它会杀死我的整个系统。我只是简单地调用SVD,然后减小矩阵大小并进行累加。没别的了!
有什么想法吗?我该如何解决这个问题?
core2du
Ram =10 Ram
Java运行时设置
-Xmx5000M
当我执行Jama矩阵代码时,没有其他程序在运行
发布于 2011-04-14 17:06:30
我也使用Jama进行奇异值分解,在求解大矩阵时也有同样的问题。为了减少内存溢出的情况,我已经将SingularValueDecomposition.java调优为紧凑的。调整是,在矩阵A中,它有如此多的0 (零)值,因此所有使用的矩阵,例如A,U,V,Work等的紧凑只允许存储大于0的可用值。在使用紧凑型奇异值分解之前,您应该制作一个矩阵文件,如r /t c /t value /n r /t c /t value /n ... '/t‘和'/n’分别表示制表符和换行符。
例如,(0,0,0),(0,1,0.5),(0,2,0),(0,3,0.2),(1,0,1),(1,1,0),(1,2,0),(1,3,0.3),矩阵大小为2*4 (R*C),那么您只需生成如下文件: MATRIXSIZE /t 2 /t 4 /n 0 /t 1 /t 0.5 /n 0 /t 3 /t 0.2 /n 1 /t 0 /t 1 /n 1 /t 3 /t 0.3 /n
如果您想使用它,请告诉我您的电子邮件地址(mg.hwang@gmail.com)。我会给出更多细节,以便在电子邮件中使用它。
我检查了一下结果是否正确。然而,我不确定它对计算机有多大的效果。无论如何,它的工作和显示更好,即使不是很多。
发布于 2011-01-29 16:33:50
您可能正面临内存不足的情况。您可能希望通过使用-Xmx选项来增加您的JVM可用的内存,例如,-Xm256m将为您的JVM提供256MB的内存,而不是默认的64MB。
您还可以考虑使用替代的库来处理内存高效的矩阵表示,使用稀疏矩阵的模型,如COO、DOK、CSR等。在维基百科上查找“稀疏矩阵”以获取更多详细信息。
This thread提供了Jama的几个替代方案,也许这也会对您有所帮助。
发布于 2011-01-30 17:48:01
彼得·泰勒是绝对正确的。
这是一个指数型的大问题。毕竟,计算8000X8000矩阵的奇异值不是小菜一碟,因为你谈论的是64,000,000个元素!
如果您使用以下命令运行JAMA MagicSquareExample:
32x32矩阵运行时间为0.062秒。
64x64将增加到0.0328秒
96x96将在1.891秒内过去
128x128,4.5秒
11.109秒160x160
192x192,24.063秒
224x224,46.063秒
83.625秒256x256
512x512,1716.719秒

https://stackoverflow.com/questions/4834910
复制相似问题