2012-06-05 3 views
9

私は、大きな浮動小数点数のベクトル(150kベクトル、それぞれ10k次元)をメモリにロードすることができないので、これをディスクに保存し、必要に応じて特定のベクターを取り出す2つの方法です。ベクタは一度作成されて保存されますが、何千もの時間が読み込まれる可能性があります。効率的に読むことが重要です。 shelveモジュールでいくつかのテストをした後、私はsqliteがこの種のタスクのためのより良いオプションになると信じていますが、私がコードを書く前に、これに関するいくつかの意見を聞きたいと思います。例えば、私が気付いていない2つのオプション以外のオプションはありますか?本当に大規模な辞書(Python)のshelveとsqliteの選択

ここで、最良のオプションがsqliteであることに同意すると仮定すると、別の質問はテーブルの正確な形式に関係します。私は、ベクトルのすべての10k要素を同じレコードに格納するのではなく、効率的なページ番号付けを助けるために、vector_key, element_no, valueという形式の行を持つきめ細かい構造を使用することを考えています。私は本当にこの問題に関する提案を感謝します。

答えて

9

sqlite3が必要な場合は、sqlalchemyのようなORMを使用すると、容易に拡張して他のバックエンドデータベースを使用することができます。

シェルフは、プロダクションコードで実際に役立つよりも「おもしろい」ものです。

あなたが話しているもう一つの点は、正規化と呼ばれています。私は個人的にはそれほど良くはありませんでした。thisはあなたのために説明する必要があります。あなたは数値ベクトルを扱っているとしてだけで余分なノートthisとして

はsqlite3の

+0

こんにちは、あなたが提案しているリンクの前に見ましたが、問題はそれが書き込みのみをテストすることです。正規化については、私が上に示唆した両方の形式はすでに正規形であり、2つのうちどれが読み込みに最も効率的であるのか不思議です。これについていくつかのテストを実行できると思います。いずれにしても、お返事ありがとうございます:) – dkar

3

対棚上げでのパフォーマンス障害を示し、あなたはPyTablesに興味深い代替を見つけることができます。

+0

こんにちは、それは本当に面白い選択肢として、私はそれをよりよく見てみましょう。提案していただきありがとうございます:) – dkar