heatmap(adj, inner_hier_labels=labels, transform="simple-all") # %% [markdown] # # import networkx as nx minigraph = nx.from_numpy_array(P, nodelist=labels) # %% [markdown] # # from src.traverse import to_markov_matrix prob_mat = to_markov_matrix(adj) prob_powers = [np.linalg.matrix_power(prob_mat, n) for n in range(1, 11)] n_timesteps = 10 n_verts = np.sum(n_per_comm) uni_labels = np.unique(labels) prob_powers = np.array(prob_powers) hist_mat = np.empty((n_verts, n_timesteps * len(uni_labels))) for i, ul in enumerate(uni_labels): from_inds = np.where(labels == ul)[0] activations = prob_powers[:, from_inds, :] total_activation = activations.sum(axis=1) hist_mat[:, i * n_timesteps:(i + 1) * n_timesteps] = total_activation.T plot_hist_mat = np.log10(hist_mat + 1)
ax=ax, ) # %% [markdown] # ## embedder = AdjacencySpectralEmbed(n_components=None, n_elbows=2) embed = embedder.fit_transform(adj) embed = np.concatenate(embed, axis=-1) pairplot(embed, labels=labels, palette="tab20") # %% [markdown] # ## Run paths print(f"Running {n_init} random walks from each source node...") transition_probs = to_markov_matrix(adj) out_inds = np.where(labels == n_blocks - 1)[0] source_inds = np.where(labels == 0)[0] def rw_from_node(s): paths = [] rw = RandomWalk(transition_probs, stop_nodes=out_inds, max_hops=10, allow_loops=False) for n in range(n_init): rw.start(s) paths.append(rw.traversal_) return paths
np.random.seed(88) A, labels = sbm(community_sizes, block_probs, directed=True, loops=False, return_labels=True) n_verts = A.shape[0] heatmap(A, inner_hier_labels=labels, cbar=False) # %% [markdown] # ## Demonstrate the simplest random walk from src.traverse import to_markov_matrix, RandomWalk transition_probs = to_markov_matrix(A) # row normalize! rw = RandomWalk(transition_probs, allow_loops=True, stop_nodes=[], max_hops=10) np.random.seed(8888) rw.start(0) print(rw.traversal_) # this one stops at max hops print() np.random.seed(2222) rw.start(0) print(rw.traversal_ ) # note that this one lands on a node with no output (41) and stops # %% [markdown] # ## Look what happens when we introduce `stop_nodes` rw = RandomWalk(transition_probs, allow_loops=True, stop_nodes=[18])