0

有向マルチエッジ加重グラフがある場合、これらのことをどのように行いますか?

  1. 頂点 I と J について、I から J までのすべてのエッジをリストします。
  2. 重みが 10 を超えるグラフ内のすべてのエッジを削除します。

1 の場合、すべての発信エッジを一覧表示し、宛先ノードでフィルター処理できます。これは非効率な可能性があるようですが、エッジを直接取得する方法はありますか? 2 の場合、すべてのエッジを一覧表示し、各重みを調べて、必要に応じてエッジを削除できます。これを行うためのきちんとした慣用的な方法はありますか?

4

1 に答える 1

4

#1に関しては、残念ながら、あなたが言及したものよりも簡単な解決策はありません(つまり、すべての発信エッジを照会してから、宛先に基づいてフィルタリングします)。igraph の C コアには、必要な処理を行う関数が呼び出されigraph_get_eids_multiていますが、関数に対応する Python インターフェイスはありません。

#2に関しては、これを行うことができます(それgがグラフオブジェクトでweightあり、重みを保持するエッジ属性の名前であり、gt「より大きい」を表すと仮定します):

g.es.select(weight_gt=10).delete()

whereg.esはグラフ全体のエッジ シーケンスを表し、そのselectメソッドはいくつかの基準に基づいてエッジ シーケンスをサブセット化し (詳細については のドキュメントをEdgeSeq.select参照)、別の を返しEdgeSeqます。次にdelete()、フィルター処理されたエッジ シーケンスのメソッドによってエッジが削除されます。

于 2013-07-19T15:30:20.593 に答える