2012-03-08 99 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方法。