我正在尝试使用Java对传感器读数应用卡尔曼滤波器,但是我正在使用的矩阵操作库给了我一个堆空间错误。那么,有没有人知道用于JVM的具有更好内存分配特性的矩阵操作库呢?
看起来这个-- http://code.google.com/p/efficient-java-matrix-library/ --只是名义上的“有效”。数据集有9424行x 2列,所有值都是双精度的(时间戳和传感器读数的3个维度中的1个)。
非常感谢,各位!
发布于 2012-03-08 10:45:50
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方法。
https://stackoverflow.com/questions/9611689
复制相似问题