基本的に巨大な正方行列である 10GB の CSV ファイルがあります。マトリックスの単一セルにできるだけ効率的にアクセスできる関数、つまりマトリックス[12345,20000]を作成しようとしています。
そのサイズを考えると、マトリックス全体を 2D 配列にロードすることは明らかに不可能です。ファイルから値を直接読み取る必要があります。
FileStream.Seek を使用してファイルのランダム アクセスを調べてみましたが、残念ながら変数の丸めにより、各セルは固定幅ではありません。特定のバイトを探して、ある種の算術演算でどのセルを見ているのかを知ることはできません。
ファイルをスキャンして、各行の最初のバイトのインデックスのルックアップ テーブルを作成することを検討しました。このようにして、matrix[12345,20000] にアクセスしたい場合は、行 12345 の先頭を探してから、行全体をスキャンし、正しいセルに到達するまでコンマを数えます。
私はこれを試してみようとしていますが、他の誰かがより良いアイデアを持っていますか? このようなファイルを処理しようとしたのは、私が初めてではないと確信しています。
乾杯
編集:ファイルには非常にまばらな行列が含まれていることに注意してください。CSV ファイルの解析が遅すぎる場合は、ファイルをより適切で処理しやすいファイル形式に変換することを検討します。スパース行列を格納する最良の方法は何ですか?