全て、
以下のサンプル「ツリー状」グラフを検討してください。
垂直方向には、ノード「0」ベースのレベル階層構造です。水平方向には、レベル 1 から始まるグループ ベースの構造です。グループとは、1 つのルート ノードから継承されたノードを意味します。
'''
+---+
| 0 | Level 0
+---+
|
+--------------+---------------+
| | |
+---+ +---+ +---+
| 1 | | 2 | | 3 | Level 1
+---+ +---+ +---+
+-----+----+ +-----+-----+ +|---+-----+
| | | | | | | | |
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
|11 | |12 | |13 | |21 | |22 | |23 | |31 | |32 | |33 | Level 2
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
| | / | / | | |
| | / | / | | |
| +---+ +---+ +---+ +---+ |
| |121|-|131| |211| |221| | Level 3
| +---+ +---+ +---+ +---+ |
| |--------|------| |
|-----------|----------------------------|
| Group 0 | group 1 | group 2 |
'''
Networkx で作成します。
# create it in networkx
import networkx as nx
G = nx.DiGraph()
G.add_edges_from([('0', '1'), ('0', '2'), ('0', '3')])
G.add_edges_from([('1', '11'), ('1', '12'), ('1', '13')])
G.add_edges_from([('2', '21'), ('2', '22'), ('2', '23')])
G.add_edges_from([('3', '31'), ('3', '32'), ('3', '33')])
#
G.add_edges_from([('12', '121'), ('13', '131')])
G.add_edges_from([('12', '121'), ('13', '131')])
G.add_edges_from([('21', '211'), ('22', '221')])
#
G.add_edges_from([('13', '121')])
G.add_edges_from([('21', '131')])
G.add_edges_from([('131', '211')])
G.add_edges_from([('131', '221')])
#
G.add_edges_from([('121', '13')]) # node may not with "in_degree" link only
G.add_edges_from([('131', '21')]) # ditto
#
G.add_edges_from([('131', '31')])
G.add_edges_from([('131', '11')])
G.add_edges_from([('11', '131')])
#
G.add_edges_from([('121', '131')])
質問:
以下のノードをサンプルとして使用して、グラフ 内のノードとエッジを見つける方法:
「121」、同じグループ内の上位レベルへのリンクが複数ありますか? (ノード エッジ タイプ「不明」、in_degree または out_degree またはその両方、次の質問と同じ)
「131」、他のグループへのより高いレベルのノードへのリンクが複数ありますか?
「131」、同じグループ内の同じレベルのノードへのリンクあり
「131」、同じレベルのノードへのリンクがあるが、他のグループにある
「21」、異なるグループの下位ノードへのリンクあり
「Graph」を初めて使用し、サンプル コードを取得して、networkx の使用方法を詳しく調べます。
どうもありがとう。