(probs)
| 228 | |
| 229 | |
| 230 | def _alias_setup(probs): |
| 231 | K = len(probs) |
| 232 | q = np.zeros(K) |
| 233 | J = np.zeros(K, dtype=int) |
| 234 | |
| 235 | smaller = [] |
| 236 | larger = [] |
| 237 | for kk, prob in enumerate(probs): |
| 238 | q[kk] = K * prob |
| 239 | if q[kk] < 1.0: |
| 240 | smaller.append(kk) |
| 241 | else: |
| 242 | larger.append(kk) |
| 243 | |
| 244 | while len(smaller) > 0 and len(larger) > 0: |
| 245 | small = smaller.pop() |
| 246 | large = larger.pop() |
| 247 | |
| 248 | J[small] = large |
| 249 | q[large] = q[large] + q[small] - 1.0 |
| 250 | if q[large] < 1.0: |
| 251 | smaller.append(large) |
| 252 | else: |
| 253 | larger.append(large) |
| 254 | |
| 255 | return J, q |
| 256 | |
| 257 | |
| 258 | def _node2vec_walk(G, walk_length, start_node, alias_nodes, alias_edges): |
no test coverage detected