Python networkx.single_source_dijkstra_path_length() Examples
The following are 21
code examples of networkx.single_source_dijkstra_path_length().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
networkx
, or try the search function
.
Example #1
Source File: neighborhood_assembly.py From graph-based-image-classification with MIT License | 6 votes |
def neighborhoods_weights_to_root(adjacency, sequence, size): def _neighborhoods_weights_to_root(adjacency, sequence): graph = nx.from_numpy_matrix(adjacency) neighborhoods = np.zeros((sequence.shape[0], size), dtype=np.int32) neighborhoods.fill(-1) for i in xrange(0, sequence.shape[0]): n = sequence[i] if n < 0: break shortest = nx.single_source_dijkstra_path_length(graph, n).items() shortest = sorted(shortest, key=lambda v: v[1]) shortest = shortest[:size] for j in xrange(0, min(size, len(shortest))): neighborhoods[i][j] = shortest[j][0] return neighborhoods return tf.py_func(_neighborhoods_weights_to_root, [adjacency, sequence], tf.int32, stateful=False, name='neighborhoods_weights_to_root')
Example #2
Source File: test_generic.py From qgisSpaceSyntaxToolkit with GNU General Public License v3.0 | 5 votes |
def test_single_source_shortest_path_length(self): l=nx.shortest_path_length(self.cycle,0) assert_equal(l,{0:0,1:1,2:2,3:3,4:3,5:2,6:1}) assert_equal(l,nx.single_source_shortest_path_length(self.cycle,0)) l=nx.shortest_path_length(self.grid,1) assert_equal(l[16],6) # now with weights l=nx.shortest_path_length(self.cycle,0,weight='weight') assert_equal(l,{0:0,1:1,2:2,3:3,4:3,5:2,6:1}) assert_equal(l,nx.single_source_dijkstra_path_length(self.cycle,0)) l=nx.shortest_path_length(self.grid,1,weight='weight') assert_equal(l[16],6)
Example #3
Source File: test_generic.py From aws-kube-codesuite with Apache License 2.0 | 5 votes |
def test_single_source_shortest_path_length(self): l = dict(nx.shortest_path_length(self.cycle,0)) assert_equal(l,{0:0,1:1,2:2,3:3,4:3,5:2,6:1}) assert_equal(l, dict(nx.single_source_shortest_path_length(self.cycle,0))) l = dict(nx.shortest_path_length(self.grid,1)) assert_equal(l[16],6) # now with weights l = dict(nx.shortest_path_length(self.cycle, 0, weight='weight')) assert_equal(l, {0: 0, 1: 1, 2: 2, 3: 3, 4: 3, 5: 2, 6: 1}) assert_equal(l, dict(nx.single_source_dijkstra_path_length( self.cycle, 0))) l = dict(nx.shortest_path_length(self.grid, 1, weight='weight')) assert_equal(l[16], 6)
Example #4
Source File: test_weighted.py From aws-kube-codesuite with Apache License 2.0 | 5 votes |
def test_negative_edge_cycle(self): G = nx.cycle_graph(5, create_using=nx.DiGraph()) assert_equal(nx.negative_edge_cycle(G), False) G.add_edge(8, 9, weight=-7) G.add_edge(9, 8, weight=3) graph_size = len(G) assert_equal(nx.negative_edge_cycle(G), True) assert_equal(graph_size, len(G)) assert_raises(ValueError, nx.single_source_dijkstra_path_length, G, 8) assert_raises(ValueError, nx.single_source_dijkstra, G, 8) assert_raises(ValueError, nx.dijkstra_predecessor_and_distance, G, 8) G.add_edge(9, 10) assert_raises(ValueError, nx.bidirectional_dijkstra, G, 8, 10)
Example #5
Source File: test_weighted.py From aws-kube-codesuite with Apache License 2.0 | 5 votes |
def test_single_source_dijkstra_path_length(self): pl = nx.single_source_dijkstra_path_length assert_equal(dict(pl(self.MXG4, 0))[2], 4) spl = pl(self.MXG4, 0, cutoff=2) assert_false(2 in spl)
Example #6
Source File: test_weighted.py From Carnets with BSD 3-Clause "New" or "Revised" License | 5 votes |
def test_negative_edge_cycle(self): G = nx.cycle_graph(5, create_using=nx.DiGraph()) assert_equal(nx.negative_edge_cycle(G), False) G.add_edge(8, 9, weight=-7) G.add_edge(9, 8, weight=3) graph_size = len(G) assert_equal(nx.negative_edge_cycle(G), True) assert_equal(graph_size, len(G)) assert_raises(ValueError, nx.single_source_dijkstra_path_length, G, 8) assert_raises(ValueError, nx.single_source_dijkstra, G, 8) assert_raises(ValueError, nx.dijkstra_predecessor_and_distance, G, 8) G.add_edge(9, 10) assert_raises(ValueError, nx.bidirectional_dijkstra, G, 8, 10)
Example #7
Source File: test_weighted.py From Carnets with BSD 3-Clause "New" or "Revised" License | 5 votes |
def test_single_source_dijkstra_path_length(self): pl = nx.single_source_dijkstra_path_length assert_equal(dict(pl(self.MXG4, 0))[2], 4) spl = pl(self.MXG4, 0, cutoff=2) assert_false(2 in spl)
Example #8
Source File: test_weighted.py From Carnets with BSD 3-Clause "New" or "Revised" License | 5 votes |
def test_absent_source(self): # the check is in _dijkstra_multisource, but this will provide # regression testing against later changes to any of the "client" # Dijkstra or Bellman-Ford functions G = nx.path_graph(2) for fn in (nx.dijkstra_path, nx.dijkstra_path_length, nx.single_source_dijkstra_path, nx.single_source_dijkstra_path_length, nx.single_source_dijkstra, nx.dijkstra_predecessor_and_distance,): assert_raises(nx.NodeNotFound, fn, G, 3, 0)
Example #9
Source File: test_weighted.py From qgisSpaceSyntaxToolkit with GNU General Public License v3.0 | 5 votes |
def test_negative_edge_cycle(self): G = nx.cycle_graph(5, create_using=nx.DiGraph()) assert_equal(nx.negative_edge_cycle(G), False) G.add_edge(8, 9, weight=-7) G.add_edge(9, 8, weight=3) graph_size = len(G) assert_equal(nx.negative_edge_cycle(G), True) assert_equal(graph_size, len(G)) assert_raises(ValueError, nx.single_source_dijkstra_path_length, G, 8) assert_raises(ValueError, nx.single_source_dijkstra, G, 8) assert_raises(ValueError, nx.dijkstra_predecessor_and_distance, G, 8) G.add_edge(9, 10) assert_raises(ValueError, nx.bidirectional_dijkstra, G, 8, 10)
Example #10
Source File: test_weighted.py From qgisSpaceSyntaxToolkit with GNU General Public License v3.0 | 5 votes |
def test_single_source_dijkstra_path_length(self): pl = nx.single_source_dijkstra_path_length assert_equal(pl(self.MXG4, 0)[2], 4) spl = pl(self.MXG4, 0, cutoff=2) assert_false(2 in spl)
Example #11
Source File: weighted.py From qgisSpaceSyntaxToolkit with GNU General Public License v3.0 | 5 votes |
def all_pairs_dijkstra_path_length(G, cutoff=None, weight='weight'): """ Compute shortest path lengths between all nodes in a weighted graph. Parameters ---------- G : NetworkX graph weight: string, optional (default='weight') Edge data key corresponding to the edge weight cutoff : integer or float, optional Depth to stop the search. Only paths of length <= cutoff are returned. Returns ------- distance : dictionary Dictionary, keyed by source and target, of shortest path lengths. Examples -------- >>> G=nx.path_graph(5) >>> length=nx.all_pairs_dijkstra_path_length(G) >>> print(length[1][4]) 3 >>> length[1] {0: 1, 1: 0, 2: 1, 3: 2, 4: 3} Notes ----- Edge weight attributes must be numerical. Distances are calculated as sums of weighted edges traversed. The dictionary returned only has keys for reachable node pairs. """ length = single_source_dijkstra_path_length # TODO This can be trivially parallelized. return {n: length(G, n, cutoff=cutoff, weight=weight) for n in G}
Example #12
Source File: vitality.py From qgisSpaceSyntaxToolkit with GNU General Public License v3.0 | 5 votes |
def weiner_index(G, weight=None): # compute sum of distances between all node pairs # (with optional weights) weiner=0.0 if weight is None: for n in G: path_length=nx.single_source_shortest_path_length(G,n) weiner+=sum(path_length.values()) else: for n in G: path_length=nx.single_source_dijkstra_path_length(G, n,weight=weight) weiner+=sum(path_length.values()) return weiner
Example #13
Source File: graph.py From momepy with MIT License | 5 votes |
def _straightness_centrality(G, weight, normalized=True): """ Calculates straightness centrality. """ straightness_centrality = {} for n in G.nodes(): straightness = 0 sp = nx.single_source_dijkstra_path_length(G, n, weight=weight) if len(sp) > 0 and len(G) > 1: for target in sp: if n != target: network_dist = sp[target] euclidean_dist = _euclidean(n, target) straightness = straightness + (euclidean_dist / network_dist) straightness_centrality[n] = straightness * (1.0 / (len(G) - 1.0)) # normalize to number of nodes-1 in connected part if normalized: if len(sp) > 1: s = (len(G) - 1.0) / (len(sp) - 1.0) straightness_centrality[n] *= s else: straightness_centrality[n] = 0 else: straightness_centrality[n] = 0.0 return straightness_centrality
Example #14
Source File: weighted.py From Carnets with BSD 3-Clause "New" or "Revised" License | 4 votes |
def all_pairs_dijkstra_path_length(G, cutoff=None, weight='weight'): """Compute shortest path lengths between all nodes in a weighted graph. Parameters ---------- G : NetworkX graph cutoff : integer or float, optional Depth to stop the search. Only return paths with length <= cutoff. weight : string or function If this is a string, then edge weights will be accessed via the edge attribute with this key (that is, the weight of the edge joining `u` to `v` will be ``G.edges[u, v][weight]``). If no such edge attribute exists, the weight of the edge is assumed to be one. If this is a function, the weight of an edge is the value returned by the function. The function must accept exactly three positional arguments: the two endpoints of an edge and the dictionary of edge attributes for that edge. The function must return a number. Returns ------- distance : iterator (source, dictionary) iterator with dictionary keyed by target and shortest path length as the key value. Examples -------- >>> G = nx.path_graph(5) >>> length = dict(nx.all_pairs_dijkstra_path_length(G)) >>> for node in [0, 1, 2, 3, 4]: ... print('1 - {}: {}'.format(node, length[1][node])) 1 - 0: 1 1 - 1: 0 1 - 2: 1 1 - 3: 2 1 - 4: 3 >>> length[3][2] 1 >>> length[2][2] 0 Notes ----- Edge weight attributes must be numerical. Distances are calculated as sums of weighted edges traversed. The dictionary returned only has keys for reachable node pairs. """ length = single_source_dijkstra_path_length for n in G: yield (n, length(G, n, cutoff=cutoff, weight=weight))
Example #15
Source File: test_weighted.py From Carnets with BSD 3-Clause "New" or "Revised" License | 4 votes |
def test_dijkstra(self): (D, P) = nx.single_source_dijkstra(self.XG, 's') validate_path(self.XG, 's', 'v', 9, P['v']) assert_equal(D['v'], 9) validate_path( self.XG, 's', 'v', 9, nx.single_source_dijkstra_path(self.XG, 's')['v']) assert_equal(dict( nx.single_source_dijkstra_path_length(self.XG, 's'))['v'], 9) validate_path( self.XG, 's', 'v', 9, nx.single_source_dijkstra(self.XG, 's')[1]['v']) validate_path( self.MXG, 's', 'v', 9, nx.single_source_dijkstra_path(self.MXG, 's')['v']) GG = self.XG.to_undirected() # make sure we get lower weight # to_undirected might choose either edge with weight 2 or weight 3 GG['u']['x']['weight'] = 2 (D, P) = nx.single_source_dijkstra(GG, 's') validate_path(GG, 's', 'v', 8, P['v']) assert_equal(D['v'], 8) # uses lower weight of 2 on u<->x edge validate_path(GG, 's', 'v', 8, nx.dijkstra_path(GG, 's', 'v')) assert_equal(nx.dijkstra_path_length(GG, 's', 'v'), 8) validate_path(self.XG2, 1, 3, 4, nx.dijkstra_path(self.XG2, 1, 3)) validate_path(self.XG3, 0, 3, 15, nx.dijkstra_path(self.XG3, 0, 3)) assert_equal(nx.dijkstra_path_length(self.XG3, 0, 3), 15) validate_path(self.XG4, 0, 2, 4, nx.dijkstra_path(self.XG4, 0, 2)) assert_equal(nx.dijkstra_path_length(self.XG4, 0, 2), 4) validate_path(self.MXG4, 0, 2, 4, nx.dijkstra_path(self.MXG4, 0, 2)) validate_path( self.G, 's', 'v', 2, nx.single_source_dijkstra(self.G, 's', 'v')[1]) validate_path( self.G, 's', 'v', 2, nx.single_source_dijkstra(self.G, 's')[1]['v']) validate_path(self.G, 's', 'v', 2, nx.dijkstra_path(self.G, 's', 'v')) assert_equal(nx.dijkstra_path_length(self.G, 's', 'v'), 2) # NetworkXError: node s not reachable from moon assert_raises(nx.NetworkXNoPath, nx.dijkstra_path, self.G, 's', 'moon') assert_raises( nx.NetworkXNoPath, nx.dijkstra_path_length, self.G, 's', 'moon') validate_path(self.cycle, 0, 3, 3, nx.dijkstra_path(self.cycle, 0, 3)) validate_path(self.cycle, 0, 4, 3, nx.dijkstra_path(self.cycle, 0, 4)) assert_equal(nx.single_source_dijkstra(self.cycle, 0, 0), (0, [0]))
Example #16
Source File: weighted.py From qgisSpaceSyntaxToolkit with GNU General Public License v3.0 | 4 votes |
def single_source_dijkstra_path_length(G, source, cutoff=None, weight='weight'): """Compute the shortest path length between source and all other reachable nodes for a weighted graph. Parameters ---------- G : NetworkX graph source : node label Starting node for path weight: string, optional (default='weight') Edge data key corresponding to the edge weight. cutoff : integer or float, optional Depth to stop the search. Only paths of length <= cutoff are returned. Returns ------- length : dictionary Dictionary of shortest lengths keyed by target. Examples -------- >>> G=nx.path_graph(5) >>> length=nx.single_source_dijkstra_path_length(G,0) >>> length[4] 4 >>> print(length) {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} Notes ----- Edge weight attributes must be numerical. Distances are calculated as sums of weighted edges traversed. See Also -------- single_source_dijkstra() """ if G.is_multigraph(): get_weight = lambda u, v, data: min( eattr.get(weight, 1) for eattr in data.values()) else: get_weight = lambda u, v, data: data.get(weight, 1) return _dijkstra(G, source, get_weight, cutoff=cutoff)
Example #17
Source File: weighted.py From qgisSpaceSyntaxToolkit with GNU General Public License v3.0 | 4 votes |
def dijkstra_path_length(G, source, target, weight='weight'): """Returns the shortest path length from source to target in a weighted graph. Parameters ---------- G : NetworkX graph source : node label starting node for path target : node label ending node for path weight: string, optional (default='weight') Edge data key corresponding to the edge weight Returns ------- length : number Shortest path length. Raises ------ NetworkXNoPath If no path exists between source and target. Examples -------- >>> G=nx.path_graph(5) >>> print(nx.dijkstra_path_length(G,0,4)) 4 Notes ----- Edge weight attributes must be numerical. Distances are calculated as sums of weighted edges traversed. See Also -------- bidirectional_dijkstra() """ length = single_source_dijkstra_path_length(G, source, weight=weight) try: return length[target] except KeyError: raise nx.NetworkXNoPath( "node %s not reachable from %s" % (source, target))
Example #18
Source File: generic.py From qgisSpaceSyntaxToolkit with GNU General Public License v3.0 | 4 votes |
def average_shortest_path_length(G, weight=None): r"""Return the average shortest path length. The average shortest path length is .. math:: a =\sum_{s,t \in V} \frac{d(s, t)}{n(n-1)} where `V` is the set of nodes in `G`, `d(s, t)` is the shortest path from `s` to `t`, and `n` is the number of nodes in `G`. Parameters ---------- G : NetworkX graph weight : None or string, optional (default = None) If None, every edge has weight/distance/cost 1. If a string, use this edge attribute as the edge weight. Any edge attribute not present defaults to 1. Raises ------ NetworkXError: if the graph is not connected. Examples -------- >>> G=nx.path_graph(5) >>> print(nx.average_shortest_path_length(G)) 2.0 For disconnected graphs you can compute the average shortest path length for each component: >>> G=nx.Graph([(1,2),(3,4)]) >>> for g in nx.connected_component_subgraphs(G): ... print(nx.average_shortest_path_length(g)) 1.0 1.0 """ if G.is_directed(): if not nx.is_weakly_connected(G): raise nx.NetworkXError("Graph is not connected.") else: if not nx.is_connected(G): raise nx.NetworkXError("Graph is not connected.") avg=0.0 if weight is None: for node in G: path_length=nx.single_source_shortest_path_length(G, node) avg += sum(path_length.values()) else: for node in G: path_length=nx.single_source_dijkstra_path_length(G, node, weight=weight) avg += sum(path_length.values()) n=len(G) return avg/(n*(n-1))
Example #19
Source File: weighted.py From aws-kube-codesuite with Apache License 2.0 | 4 votes |
def all_pairs_dijkstra_path_length(G, cutoff=None, weight='weight'): """Compute shortest path lengths between all nodes in a weighted graph. Parameters ---------- G : NetworkX graph cutoff : integer or float, optional Depth to stop the search. Only return paths with length <= cutoff. weight : string or function If this is a string, then edge weights will be accessed via the edge attribute with this key (that is, the weight of the edge joining `u` to `v` will be ``G.edges[u, v][weight]``). If no such edge attribute exists, the weight of the edge is assumed to be one. If this is a function, the weight of an edge is the value returned by the function. The function must accept exactly three positional arguments: the two endpoints of an edge and the dictionary of edge attributes for that edge. The function must return a number. Returns ------- distance : iterator (source, dictionary) iterator with dictionary keyed by target and shortest path length as the key value. Examples -------- >>> G = nx.path_graph(5) >>> length = dict(nx.all_pairs_dijkstra_path_length(G)) >>> for node in [0, 1, 2, 3, 4]: ... print('1 - {}: {}'.format(node, length[1][node])) 1 - 0: 1 1 - 1: 0 1 - 2: 1 1 - 3: 2 1 - 4: 3 >>> length[3][2] 1 >>> length[2][2] 0 Notes ----- Edge weight attributes must be numerical. Distances are calculated as sums of weighted edges traversed. The dictionary returned only has keys for reachable node pairs. """ length = single_source_dijkstra_path_length for n in G: yield (n, length(G, n, cutoff=cutoff, weight=weight))
Example #20
Source File: test_weighted.py From aws-kube-codesuite with Apache License 2.0 | 4 votes |
def test_dijkstra(self): (D, P) = nx.single_source_dijkstra(self.XG, 's') validate_path(self.XG, 's', 'v', 9, P['v']) assert_equal(D['v'], 9) validate_path( self.XG, 's', 'v', 9, nx.single_source_dijkstra_path(self.XG, 's')['v']) assert_equal(dict( nx.single_source_dijkstra_path_length(self.XG, 's'))['v'], 9) validate_path( self.XG, 's', 'v', 9, nx.single_source_dijkstra(self.XG, 's')[1]['v']) validate_path( self.MXG, 's', 'v', 9, nx.single_source_dijkstra_path(self.MXG, 's')['v']) GG = self.XG.to_undirected() # make sure we get lower weight # to_undirected might choose either edge with weight 2 or weight 3 GG['u']['x']['weight'] = 2 (D, P) = nx.single_source_dijkstra(GG, 's') validate_path(GG, 's', 'v', 8, P['v']) assert_equal(D['v'], 8) # uses lower weight of 2 on u<->x edge validate_path(GG, 's', 'v', 8, nx.dijkstra_path(GG, 's', 'v')) assert_equal(nx.dijkstra_path_length(GG, 's', 'v'), 8) validate_path(self.XG2, 1, 3, 4, nx.dijkstra_path(self.XG2, 1, 3)) validate_path(self.XG3, 0, 3, 15, nx.dijkstra_path(self.XG3, 0, 3)) assert_equal(nx.dijkstra_path_length(self.XG3, 0, 3), 15) validate_path(self.XG4, 0, 2, 4, nx.dijkstra_path(self.XG4, 0, 2)) assert_equal(nx.dijkstra_path_length(self.XG4, 0, 2), 4) validate_path(self.MXG4, 0, 2, 4, nx.dijkstra_path(self.MXG4, 0, 2)) validate_path( self.G, 's', 'v', 2, nx.single_source_dijkstra(self.G, 's', 'v')[1]) validate_path( self.G, 's', 'v', 2, nx.single_source_dijkstra(self.G, 's')[1]['v']) validate_path(self.G, 's', 'v', 2, nx.dijkstra_path(self.G, 's', 'v')) assert_equal(nx.dijkstra_path_length(self.G, 's', 'v'), 2) # NetworkXError: node s not reachable from moon assert_raises(nx.NetworkXNoPath, nx.dijkstra_path, self.G, 's', 'moon') assert_raises( nx.NetworkXNoPath, nx.dijkstra_path_length, self.G, 's', 'moon') validate_path(self.cycle, 0, 3, 3, nx.dijkstra_path(self.cycle, 0, 3)) validate_path(self.cycle, 0, 4, 3, nx.dijkstra_path(self.cycle, 0, 4)) assert_equal(nx.single_source_dijkstra(self.cycle, 0, 0), (0, [0]))
Example #21
Source File: neighborhood_assembly.py From graph-based-image-classification with MIT License | 4 votes |
def neighborhoods_grid_spiral(adjacency, sequence, size): def _neighborhoods_grid_spiral(adjacency, sequence): graph = nx.from_numpy_matrix(adjacency) neighborhoods = np.zeros((sequence.shape[0], size), dtype=np.int32) neighborhoods.fill(-1) # Note: This method just works properly on planar graphs where nodes # are placed in a grid like layout and are weighted by distance. # # Add root to arr => [root] # Find nearest neighbor x to root # Add x => arr = [root, x] # Find nearest neighbor y with n(x, y) and min w(x,y) + w(root, y) # that is not already in arr. # set x = y # repeat until arr.length == size for i in xrange(0, sequence.shape[0]): root = sequence[i] if root < 0: break # Add root node to the beginning of the neighborhood. neighborhoods[i][0] = root x = root ws = nx.single_source_dijkstra_path_length(graph, root) ws = list(ws.items()) for j in xrange(1, size): if x == -1: break y = -1 weight = float('inf') for _, n, d, in graph.edges_iter(x, data=True): if n in neighborhoods[i]: continue w = ws[n][1] + d['weight'] if w < weight: y = n weight = w neighborhoods[i][j] = y x = y return neighborhoods return tf.py_func(_neighborhoods_grid_spiral, [adjacency, sequence], tf.int32, stateful=False, name='neighborhoods_grid_spiral')