0

python-igraph中是否有这样的功能(或者networkx,所以我可以调整它以在igraph中工作),还是我必须实现它?

如果它还不存在,我会像这样花费它:

  1. 获取源节点的入射边,
  2. 只保留符合属性条件的边(例如,只保留属性为“major”的边)
  3. 对于 2. 中的边,使用边的 target 属性找到目标节点,如此处所述

欢迎任何改进!

4

2 回答 2

3

igraph 中没有为此的预制功能,但您可以尝试以下操作:

def filtered_neighbors(graph, node, condition):
    return [ \
        edge.source if edge.target == node else edge.source \
        for edge in graph.es[graph.incident(node)] \
        if condition(edge)
    ]

condition必须是一个 Python 可调用的,它接受一条边并返回是否可以接受该边。

于 2015-07-11T12:28:25.473 回答
1

尝试列表理解。

import networkx as nx
G = nx.Graph()
G.add_edge(1,2,weight=3)
G.add_edge(1,3,weight = 5)
node = 1
weight3_neighbors = [neighbor for neighbor in G.neighbors_iter(node) if G.edge[node][neighbor]['weight']==3]

weight3_neighbors
> [2]
于 2015-07-09T09:24:09.267 回答