带有Matrix库的HeapSpace

时间:2012-03-08 01:22:57

标签: java sensor

我正在尝试使用Java将卡尔曼滤波器应用于传感器读数,但我正在使用的矩阵操作库给我一个堆空间错误。那么,有没有人知道JVM的矩阵操作库具有更好的内存分配特性?

看起来这个 - http://code.google.com/p/efficient-java-matrix-library/ - 只是名义上的“有效”。数据集有9424行乘2列,所有值都是双倍的(时间戳和来自传感器读数的3个中的一个维度)。

非常感谢,伙计们!

1 个答案:

答案 0 :(得分:0)

1)卡尔曼滤波器不需要大量非线性缩放量的存储器:它只是根据2个值计算估计值 - 初始值和前一个值。因此,您应该期望所需的内存量应与数据点的总量成比例。请参阅:http://rsbweb.nih.gov/ij/plugins/kalman.html

2)切换到浮点数将是计算所需内存的1/2。在你的情况下这可能是微不足道的 - 我假设如果数据集由于内存而崩溃,那么你运行的JVM只有很少的内存你有一个庞大的数据集。

3)如果你真的有一个大数据集(> 1G)并将其减半很重要,你提到的库可以重构为仅使用浮点数。

4)对于java矩阵库的比较,你可以检查http://code.google.com/p/java-matrix-benchmark/wiki/MemoryResults_2012_02 ---最低内存占用的库是ojAlgo,EJML和Colt。 我对Colt的大规模计算表现非常好 - 但我不确定哪些人实施了Kalaman方法。