Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/networkx/algorithms/assortativity/neighbor_degree.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 __all__ = ["average_neighbor_degree"] | |
2 | |
3 | |
4 def _average_nbr_deg(G, source_degree, target_degree, nodes=None, weight=None): | |
5 # average degree of neighbors | |
6 avg = {} | |
7 for n, deg in source_degree(nodes, weight=weight): | |
8 # normalize but not by zero degree | |
9 if deg == 0: | |
10 deg = 1 | |
11 nbrdeg = target_degree(G[n]) | |
12 if weight is None: | |
13 avg[n] = sum(d for n, d in nbrdeg) / float(deg) | |
14 else: | |
15 avg[n] = sum((G[n][nbr].get(weight, 1) * d for nbr, d in nbrdeg)) / float( | |
16 deg | |
17 ) | |
18 return avg | |
19 | |
20 | |
21 def average_neighbor_degree(G, source="out", target="out", nodes=None, weight=None): | |
22 r"""Returns the average degree of the neighborhood of each node. | |
23 | |
24 The average neighborhood degree of a node `i` is | |
25 | |
26 .. math:: | |
27 | |
28 k_{nn,i} = \frac{1}{|N(i)|} \sum_{j \in N(i)} k_j | |
29 | |
30 where `N(i)` are the neighbors of node `i` and `k_j` is | |
31 the degree of node `j` which belongs to `N(i)`. For weighted | |
32 graphs, an analogous measure can be defined [1]_, | |
33 | |
34 .. math:: | |
35 | |
36 k_{nn,i}^{w} = \frac{1}{s_i} \sum_{j \in N(i)} w_{ij} k_j | |
37 | |
38 where `s_i` is the weighted degree of node `i`, `w_{ij}` | |
39 is the weight of the edge that links `i` and `j` and | |
40 `N(i)` are the neighbors of node `i`. | |
41 | |
42 | |
43 Parameters | |
44 ---------- | |
45 G : NetworkX graph | |
46 | |
47 source : string ("in"|"out") | |
48 Directed graphs only. | |
49 Use "in"- or "out"-degree for source node. | |
50 | |
51 target : string ("in"|"out") | |
52 Directed graphs only. | |
53 Use "in"- or "out"-degree for target node. | |
54 | |
55 nodes : list or iterable, optional | |
56 Compute neighbor degree for specified nodes. The default is | |
57 all nodes in the graph. | |
58 | |
59 weight : string or None, optional (default=None) | |
60 The edge attribute that holds the numerical value used as a weight. | |
61 If None, then each edge has weight 1. | |
62 | |
63 Returns | |
64 ------- | |
65 d: dict | |
66 A dictionary keyed by node with average neighbors degree value. | |
67 | |
68 Examples | |
69 -------- | |
70 >>> G = nx.path_graph(4) | |
71 >>> G.edges[0, 1]["weight"] = 5 | |
72 >>> G.edges[2, 3]["weight"] = 3 | |
73 | |
74 >>> nx.average_neighbor_degree(G) | |
75 {0: 2.0, 1: 1.5, 2: 1.5, 3: 2.0} | |
76 >>> nx.average_neighbor_degree(G, weight="weight") | |
77 {0: 2.0, 1: 1.1666666666666667, 2: 1.25, 3: 2.0} | |
78 | |
79 >>> G = nx.DiGraph() | |
80 >>> nx.add_path(G, [0, 1, 2, 3]) | |
81 >>> nx.average_neighbor_degree(G, source="in", target="in") | |
82 {0: 1.0, 1: 1.0, 2: 1.0, 3: 0.0} | |
83 | |
84 >>> nx.average_neighbor_degree(G, source="out", target="out") | |
85 {0: 1.0, 1: 1.0, 2: 0.0, 3: 0.0} | |
86 | |
87 Notes | |
88 ----- | |
89 For directed graphs you can also specify in-degree or out-degree | |
90 by passing keyword arguments. | |
91 | |
92 See Also | |
93 -------- | |
94 average_degree_connectivity | |
95 | |
96 References | |
97 ---------- | |
98 .. [1] A. Barrat, M. Barthélemy, R. Pastor-Satorras, and A. Vespignani, | |
99 "The architecture of complex weighted networks". | |
100 PNAS 101 (11): 3747–3752 (2004). | |
101 """ | |
102 source_degree = G.degree | |
103 target_degree = G.degree | |
104 if G.is_directed(): | |
105 direction = {"out": G.out_degree, "in": G.in_degree} | |
106 source_degree = direction[source] | |
107 target_degree = direction[target] | |
108 return _average_nbr_deg(G, source_degree, target_degree, nodes=nodes, weight=weight) | |
109 | |
110 | |
111 # obsolete | |
112 # def average_neighbor_in_degree(G, nodes=None, weight=None): | |
113 # if not G.is_directed(): | |
114 # raise nx.NetworkXError("Not defined for undirected graphs.") | |
115 # return _average_nbr_deg(G, G.in_degree, G.in_degree, nodes, weight) | |
116 # average_neighbor_in_degree.__doc__=average_neighbor_degree.__doc__ | |
117 | |
118 # def average_neighbor_out_degree(G, nodes=None, weight=None): | |
119 # if not G.is_directed(): | |
120 # raise nx.NetworkXError("Not defined for undirected graphs.") | |
121 # return _average_nbr_deg(G, G.out_degree, G.out_degree, nodes, weight) | |
122 # average_neighbor_out_degree.__doc__=average_neighbor_degree.__doc__ |