networkx edge 属性_NetworkX:有向图

ea4bc647f0efbe4173333082da924c65.png

在实现混合关联时,发现处理多层关联的代码有点复杂。

左右关联,首先想到的是树,只看一个source,树确实是个不错的选择,尤其是自底向上逐层关联的场景中,树保证了可回溯。可是在多个表join成一个数据集时,同一层的多个source又构成链表,也就是说要在遍历树的同时,还要兼顾list。

从source的定义来看,是个嵌套列表,网上能找到很多flat的实现。可是要实现自底向上,还是要加自己写的代码。

source的定义,像是一个由二叉树构成的列表,可是在同一层之内,多个source之间有一个“主表”并联起多张表(join的习惯用法)。这样看,就是个有向图。图的路径发现功能可以实现可回溯。

NetworkX提供了MultiDiGraph、DiGraph两种有向图结构,两者的区别,在于MultiDiGraph允许两个节点之间,存在多个相同方向的边,这个功能暂时用不到,只要用DiGraph就够了。


验证数据:

import networkx as nx
import matplotlib.pyplot as plt

data_dict = {
    1:[{'left':20, 'right':21}],
    20:[{'left':30, 'right':31}],
    21:[{'left':40, 'right':41}],
    30:[],
    31:[],
    40:[],
    41:[]
}

G = nx.DiGraph()

# step 1: add edges
for key in data_dict:
    print(key)
    for source in data_dict[key]:
        if 'left' in source:
            print('left [%d]' % (source['left']))
            if source['left'] in data_dict:
                G.add_edge(key, source['left'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NetworkX 中,可以为每个节点设置属性,并且还可以为每条边设置属性。要查询具有特定节点或边属性的图,可以使用 NetworkX 的 `get_node_attributes` 和 `get_edge_attributes` 方法来检索节点和边属性的字典。以下是一个示例: ```python import networkx as nx # 创建一个有向图 G = nx.DiGraph() # 添加节点并设置属性 G.add_node(1, name='Alice', age=25) G.add_node(2, name='Bob', age=30) G.add_node(3, name='Charlie', age=35) # 添加边并设置属性 G.add_edge(1, 2, weight=0.5) G.add_edge(2, 3, weight=2.0) G.add_edge(3, 1, weight=1.5) # 检索所有节点的属性字典 node_attrs = nx.get_node_attributes(G, 'name') print(node_attrs) # {1: 'Alice', 2: 'Bob', 3: 'Charlie'} # 检索所有边的属性字典 edge_attrs = nx.get_edge_attributes(G, 'weight') print(edge_attrs) # {(1, 2): 0.5, (2, 3): 2.0, (3, 1): 1.5} # 检索具有特定节点属性的节点 nodes_with_age_30 = [n for n, attrs in G.nodes(data=True) if attrs['age'] == 30] print(nodes_with_age_30) # [2] # 检索具有特定边属性的边 edges_with_weight_2 = [(u, v) for u, v, attrs in G.edges(data=True) if attrs['weight'] == 2.0] print(edges_with_weight_2) # [(2, 3)] ``` 在上面的示例中,我们首先创建了一个有向图,并为每个节点和边设置了属性。然后,我们使用 `get_node_attributes` 和 `get_edge_attributes` 方法检索节点和边属性的字典。最后,我们使用列表推导式检索具有特定节点或边属性的节点或边。 这是查询具有特定节点或边属性的图的最佳实践之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值