私は大きな(10^7ノード)グラフをPythonで操作できる必要があります。各ノード/エッジに対応するデータは最小であり、例えば少数のストリングである。 メモリと速度の面で最も効率的なものは何ですか、、これを行う方法?Pythonで最も効率的なグラフデータ構造は何ですか?
dictsのdictはより柔軟で実装が簡単ですが、私は直感的にリストのリストがより速くなることを期待しています。
graph[I][J]["Property"]="value"
あなたは何を示唆している:リストのオプションは、私はdictsソートの何かを可能にする一方で、構造体から分離したデータを保持することも必要でしょうか?
はい、私は効率がどういう意味であるかを少しはっきりさせていたはずです。この特定のケースでは、私はランダムアクセス検索の点でそれを意味します。
データをメモリにロードすることは大きな問題ではありません。それは一度だけで済んでいます。時間がかかる部分はノードを訪問しているので、私が情報を抽出し、私が興味を持っているメトリクスを測定することができます。
私は各ノードをクラスにすることは考えていませんでした(プロパティはすべてのノードで同じ)そのようなオーバーヘッドの余分な層を追加しますか?誰かが分かち合うことができる同様のケースで直接体験してもらいたいと思っていました。結局のところ、グラフはCSの最も一般的な抽象化の1つです。
NetworkXは素晴らしいですが、残念ながら10^7ノードを処理する問題があります。私は、2Mのノード15Mのエッジといくつかのint属性を持つ16GBのRAMを日常的に使っています。それよりも魅力的なものは忘れてください。 – Sint