2012-03-08 98 views
0

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

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

非常感谢,伙计们!

+1

你能增加堆空间吗?这是另一种选择。 – 2012-03-08 01:25:12

+0

不同的卡尔曼滤波器实现具有非常不同的内存配置文件。最简单的实现可能会很慢并且会占用内存。 Arthur Gelb,“应用最优估计”涉及了其中的一些细节。 – 2012-04-23 03:24:20

+0

我可以,但重点是我不需要这样做。增加堆的大小仅仅是一个马虎编码的绷带,我想避免第一个例子中的草率编码。 – hd1 2012-04-23 11:47:58

回答

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,和柯尔特。 伊夫曾与小马良好的运气大规模的计算 - 但我不知道哪些实现Kalaman方法。