2012-02-16 5 views
1

現時点では、計算に使用する大量のfloat/doubleデータセットを扱っています。データAとデータBを比較するためのファイルがあり、ユークリッド距離/コサインの類似性を計算したいと思います。 I.データポイント1は、データBポイントを反復して、最も近いネイバーを見つける。大きなデータセットへのアクセスおよび/またはそれらの格納

データはテキストファイルで示されていますが、問題はありません。情報を保存したり読むのに理想的な方法は何でしょうか?

データAのすべてのポイントに対してデータBを繰り返す必要があります。データはフロートとして保存されます。各データ点には寸法があります。ファイルには約2milの浮動小数点数が含まれている場合があります。

私が使用して行く必要があります。

  1. 常にデータBのファイルを読み込み、文字列を解析する(私はこれは非常に非効率的であることを感じて)
  2. リストにデータを格納(floatの配列)
  3. メモリマップIOの使用?
  4. HashMapの(私はHashMapの比較的新しいですが、彼らは私がちょうど変更なしで繰り返し処理していた場合、コレクションの位置は、時間の経過とともに変化することがあり位置が変わると言う?)
+1

なぜ簡単な 'float [] []'配列がここでは動作しないのか分かりません。 –

+0

浮動小数点数を4バイトにすると浮動小数点数を2倍にして、浮動小数点数を配列に格納すると必要なメモリを見積もってみてください。それは8百万バイトを作ります:8 MBs。ピーナッツは、メモリに格納する。データ構造がより多くのメモリを必要とし、フロートごとに必要なメモリを10倍に増やしても、それでも80MBしか作成されません。まだピーナッツ。 –

+0

ああ、データセット内のポイントを追加するのを忘れていて、セットが不完全になっている可能性があります。したがって、私は にする必要があります1)ファイルをスキャンして、最大寸法とクラスを見つけます 2)リストを使用します。 実際には、確認済みで定義された2D配列を作成する前に、ファイルを一度スキャンしてリストを使用すると、オーバーヘッドが少なくなると思いますか? –

答えて

1

2M浮動小数点数はそれほど多くありません。それらをすべてリストに入れることは、まったく問題ありません。 AとBが多次元である場合、float [] []はうまくいきます。メモリが不足している場合は、最初にB全体を読み込みますが、一度に1つのデータ点を読み込みます。

+0

申し訳ありません私は上記の質問につながった追加情報を残して、 –

1

塩基性溶液最高のものです:ちょうどfloat[][]。これはほぼ確実にメモリ効率が高く、最も速いソリューションであり、非常に簡単です。

+0

申し訳ありませんが、私は上記の質問につながった追加情報を残しました、あなたがそれにいくつかの光を出すことができればそれを感謝する –

関連する問題