Python - Networkx: соседи с определенным весом - PullRequest
0 голосов
/ 03 мая 2018

Этот параметр вопроса - python 2.7 с использованием пакета networkx: https://networkx.github.io/documentation/stable/reference/classes/generated/networkx.Graph.neighbors.html

Я ищу способ использовать функцию "networkx.Graph.neighbors", которая возвращает мне всех соседей с определенным значением веса (или выше / ниже определенного значения).

Какие-нибудь предложения, как я мог сделать это возможным?

Заранее спасибо :). Тим

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я собираюсь предположить, что «все соседи с определенным значением веса» относятся к весам узлов. Я сделаю пример, найдя соседей весом больше определенного значения.

import networkx as nx
import random

G = nx.Graph()

#now create nodes with random weights.  If this notation is
#unfamiliar, read up on list comprehensions.  They make life much easier.
nodes = [(node, {'weight':random.random()}) for node in range(10)]
G.add_nodes_from(nodes)

#now G has the nodes and they each have a random weight.
G.nodes(data=True)
> [(0, {'weight': 0.42719462610483916}),
 (1, {'weight': 0.13985473528922154}),
 (2, {'weight': 0.06889096983404697}),
 (3, {'weight': 0.10772762947744585}),
 (4, {'weight': 0.24497933676194383}),
 (5, {'weight': 0.18527691296273396}),
 (6, {'weight': 0.16379510964497113}),
 (7, {'weight': 0.5481883941716088}),
 (8, {'weight': 0.3782931298078134}),
 (9, {'weight': 0.5902126428368549})]

#now create edges from 0 to all other nodes
zero_edges = [(0,u) for u in range(1,10)]
G.add_edges_from(zero_edges)

#now find all neighbors of 0 with weight > 0.5
heavy_neighbors = [nbr for nbr in G.neighbors(0) if G.node[nbr]['weight']>0.5]
heavy_neighbors
>[7,9]

Если вы хотите, вы также можете сделать heavy_neighbors генератором, заменив внешние [ и ] на ( и ).

0 голосов
/ 03 мая 2018

Предположим, что вы хотите отфильтровать соседей узла 'c' в соответствии с весом. Создание следующего графика:

    G = nx.Graph()
    G.add_edge('a', 'b', weight=0.6)
    G.add_edge('a', 'c', weight=0.2)
    G.add_edge('c', 'd', weight=0.1)
    G.add_edge('c', 'e', weight=0.7)
    G.add_edge('c', 'f', weight=0.9)
    G.add_edge('a', 'd', weight=0.3)

    list_neighbors=G.neighbors('c')
    for i in list_neighbors:
        if G.edges[('c',i)]['weight']>0.5:
            print (G.edges[('c',i)])

Дает: {'вес': 0,7} {'вес': 0,9} Надеюсь, что это ответ на ваш вопрос. Обратитесь по ссылке, если вам нужно больше информации о том, как работать с весами. https://networkx.github.io/documentation/stable/auto_examples/drawing/plot_weighted_graph.html

...