2012-03-08 36 views
0

私はカルマンフィルタをJavaを使ってセンサの読みに適用しようとしていますが、私が使用している行列操作ライブラリは私にヒープスペースエラーを与えています。だから、より良いメモリ割り当て特性を持つJVM用の行列操作ライブラリを知っている人はいますか?HeapSpace with Matrix library

この1つで、http://code.google.com/p/efficient-java-matrix-library/ - は「効率的」であると思われます。データセットには9424行×2列があり、すべての値は2倍(タイムスタンプとセンサからの読み取り値の3つの次元)です。

多くのありがとうございます!

+1

ヒープスペースを増やすことができますか?それは別の選択肢です。 –

+0

異なるカルマンフィルタの実装には、非常に異なるメモリプロファイルがあります。最も簡単な実装は遅くなり、メモリが枯渇する可能性があります。アーサー・ゲルブ(Arthur Gelb)、「応用最適推定(Applied Optimal Estimation)」は、これらの詳細の一部に入る。 –

+0

私はできますが、要点はそうする必要がないということです。ヒープサイズを増やすことは、粗悪なコーディングではまさにバンダイです。最初の例では、コードが邪魔にならないようにしたいと思います。 – hd1

答えて

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です。 Iveは大規模な計算のためにColtとの幸運を持っていましたが、どちらがKalamanメソッドを実装しているかわかりません。