2015-07-09 1 views
0

Есть ли такая функция в python-igraph (или networkx, поэтому я мог бы адаптировать ее для работы в igraph), или у меня есть его реализовать?Python-IGraph: Найти соседние узлы, только если соединительные ребра имеют определенные атрибуты.

Если оно не существует еще, я бы затрата это так:

  1. Получить падающие края узла источника,
  2. только держать края, которые удовлетворяют критериям атрибутов (например, ребра только с атрибут «главным»)
  3. Для ребер из 2. найдите целевых узлов с использованием целевого свойства края, как описано here

Любые улучшения Добро пожаловать!

ответ

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] 
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 отозваны, который принимает края и возвращается, может ли быть принят край ,

+0

Это хорошо подходит! Благодарю. И, кстати, почему бы нам не расширить этот самый короткий путь func в python-графе. Таким образом, мы могли бы создавать кратчайшие пути с условием атрибута края. То есть в уличной сети поиск кратчайшего пути для ребер, например, в атрибуте «путь» не имеет значения «автострада идентифицирует пути, не подходящие для пешеходов .. или многие другие такие вещи? – sal

+0

Существует много причин, самое серьезное из которых: функция кратчайшего пути реализована в C, и она полностью не знает о том, что над ней есть слой Python. Было бы довольно сложно перезвонить на Python из функции кратчайшего пути. –

Смежные вопросы