Find the maximum weight for this node

I have a directed graph in NetworkX. Edges are weighted from 0 to 1, representing the probabilities of their occurrence. The network connection is quite large, so I want to trim such edges for each node, only the highest probability of the node remains.

I am not sure how to in_edges over all node and save only the graphs with the greatest weight in_edges . Is there a networkx function that allows us to do this?

Here is an example of what I would like to do.

 Nodes: A, B, C, D Edges: A->B, weight=1.0 A->C, weight=1.0 A->D, weight=0.5 B->C, weight=0.9 B->D, weight=0.8 C->D, weight=0.9 Final Result Wanted: A->B, weight=1.0 A->C, weight=1.0 C->D, weight=0.9 

If there are two edges in a node and they both have the highest weight, I would like to keep both of them.

+4
source share
2 answers

The solution I had was inspired by Arik. I used the following code:

 for node in G.nodes(): edges = G.in_edges(node, data=True) if len(edges) > 0: #some nodes have zero edges going into it min_weight = min([edge[2]['weight'] for edge in edges]) for edge in edges: if edge[2]['weight'] > min_weight: G.remove_edge(edge[0], edge[1]) 
+6
source

Here are some ideas:

 import networkx as nx G = nx.DiGraph() G.add_edge('A','B', weight=1.0) G.add_edge('A','C', weight=1.0) G.add_edge('A','D', weight=0.5) G.add_edge('B','C', weight=0.9) G.add_edge('B','D', weight=0.8) G.add_edge('C','D', weight=0.9) print "all edges" print G.edges(data=True) print "edges >= 0.9" print [(u,v,d) for (u,v,d) in G.edges(data=True) if d['weight'] >= 0.9] print "sorted by weight" print sorted(G.edges(data=True), key=lambda (source,target,data): data['weight']) 
+8
source

Source: https://habr.com/ru/post/1496913/


All Articles