(self)
| 157 | return alias_setup(normalized_probs) |
| 158 | |
| 159 | def _preprocess_transition_probs(self): |
| 160 | # Preprocessing of transition probabilities for guiding the random walks. |
| 161 | G = self.G |
| 162 | is_directed = nx.is_directed(self.G) |
| 163 | |
| 164 | print(len(list(G.nodes()))) |
| 165 | print(len(list(G.edges()))) |
| 166 | |
| 167 | s = time.time() |
| 168 | alias_nodes = {} |
| 169 | for node in G.nodes(): |
| 170 | unnormalized_probs = [G[node][nbr]["weight"] for nbr in G.neighbors(node)] |
| 171 | norm_const = sum(unnormalized_probs) |
| 172 | normalized_probs = [float(u_prob) / norm_const for u_prob in unnormalized_probs] |
| 173 | alias_nodes[node] = alias_setup(normalized_probs) |
| 174 | |
| 175 | t = time.time() |
| 176 | print("alias_nodes", t - s) |
| 177 | |
| 178 | alias_edges = {} |
| 179 | s = time.time() |
| 180 | |
| 181 | if is_directed: |
| 182 | for edge in G.edges(): |
| 183 | alias_edges[edge] = self._get_alias_edge(edge[0], edge[1]) |
| 184 | else: |
| 185 | for edge in G.edges(): |
| 186 | alias_edges[edge] = self._get_alias_edge(edge[0], edge[1]) |
| 187 | alias_edges[(edge[1], edge[0])] = self._get_alias_edge(edge[1], edge[0]) |
| 188 | |
| 189 | t = time.time() |
| 190 | print("alias_edges", t - s) |
| 191 | |
| 192 | self.alias_nodes = alias_nodes |
| 193 | self.alias_edges = alias_edges |
| 194 | |
| 195 | return |
no test coverage detected