根据节点的属性 NetworkX 将图划分为太阳图
partition graph into sungraphs based on node's attribute NetworkX
我正在使用 Networkx 计算图形的一些度量,例如直径、聚类系数等。如何对整个图形执行此操作很简单。我感兴趣的是在具有相同属性(比如颜色)的节点之间找到这些度量。我在想,如果我可以将图划分为不同的子图,其中每个子图中的节点具有相同的颜色,那么我可以继续并测量该子图中的直径。所以我的问题是:有没有办法将图划分为包含相同颜色节点的子图?
如果有任何见解,我将不胜感激。
NetworkX 2.x+:
演示
import networkx as nx
G = nx.Graph()
G.add_nodes_from([1, 2, 3], color="red")
G.add_nodes_from([4, 5, 6])
G.nodes # NodeView((1, 2, 3, 4, 5, 6))
# create generator
nodes = (
node
for node, data
in G.nodes(data=True)
if data.get("color") == "red"
)
subgraph = G.subgraph(nodes)
subgraph.nodes # NodeView((1, 2, 3))
较旧的 NetworkX
迭代 (Graph.iter_nodes()
) and filter the nodes based on your criteria. Pass that list to Graph.subgraph()
它将 return 那些节点及其内部边缘的副本。
例如:
G = nx.Graph()
# ... build or do whatever to the graph
nodes = (n for n, d in G.nodes_iter(data=True)) if d.get('color') == 'red')
subgraph = G.subgraph(nodes)
我正在使用 Networkx 计算图形的一些度量,例如直径、聚类系数等。如何对整个图形执行此操作很简单。我感兴趣的是在具有相同属性(比如颜色)的节点之间找到这些度量。我在想,如果我可以将图划分为不同的子图,其中每个子图中的节点具有相同的颜色,那么我可以继续并测量该子图中的直径。所以我的问题是:有没有办法将图划分为包含相同颜色节点的子图?
如果有任何见解,我将不胜感激。
NetworkX 2.x+:
演示
import networkx as nx
G = nx.Graph()
G.add_nodes_from([1, 2, 3], color="red")
G.add_nodes_from([4, 5, 6])
G.nodes # NodeView((1, 2, 3, 4, 5, 6))
# create generator
nodes = (
node
for node, data
in G.nodes(data=True)
if data.get("color") == "red"
)
subgraph = G.subgraph(nodes)
subgraph.nodes # NodeView((1, 2, 3))
较旧的 NetworkX
迭代 (Graph.iter_nodes()
) and filter the nodes based on your criteria. Pass that list to Graph.subgraph()
它将 return 那些节点及其内部边缘的副本。
例如:
G = nx.Graph()
# ... build or do whatever to the graph
nodes = (n for n, d in G.nodes_iter(data=True)) if d.get('color') == 'red')
subgraph = G.subgraph(nodes)