mpsic_project_2_random_walks/random-walks.ipynb

501 lines
147 KiB
Plaintext
Raw Permalink Normal View History

2022-06-21 13:00:45 +02:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"id": "buf7_VyObrNE"
},
"outputs": [],
"source": [
"from sklearn.preprocessing import normalize as skl_normalize\n",
"from matplotlib.pylab import show, cm, axis\n",
"import matplotlib.pyplot as plt\n",
"import networkx as nx\n",
"import numpy as np\n",
"import sys"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"id": "G7NB8dWAbrPn"
},
"outputs": [],
"source": [
"def normalize_cols(target_matrix):\n",
" return skl_normalize(target_matrix, norm=\"l1\", axis=0)\n",
"\n",
"def inflate_matrix(target_matrix, factor):\n",
" return normalize_cols(np.power(target_matrix, factor))\n",
"\n",
"def expand_matrix(target_matrix, factor):\n",
" return np.linalg.matrix_power(target_matrix, factor)"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"id": "WW5B8s6sbrRu"
},
"outputs": [],
"source": [
"def get_clusters(target_matrix):\n",
" print(\"Matrix to 'cluster':\\n\", target_matrix)\n",
" clusters = []\n",
" for i, edge in enumerate(target_matrix): \n",
" #* Check whether the there is connection between origin node and currently checked one\n",
" if edge[i]:\n",
" #* print(f\"For node {i} we have: {edge} → {target_matrix[i,:]}\")\n",
" clusters.append(edge)\n",
" \n",
" clust_map = {}\n",
" for cluster_id, cluster in enumerate(clusters): #* loop over clusters list and retrieve connected nodes ids \n",
" cluster_nodes = [ i for i, node in enumerate(cluster) if node ]\n",
" #* print(f\"For cluster {cluster_id} we have: {cluster} \\n\\t→\\tnodes: {cluster_nodes}\")\n",
" clust_map[cluster_id] = cluster_nodes\n",
" return clust_map\n",
"\n",
"def stop_condition(matrix, iteration):\n",
" #* print(\"Stop matrix: \", matrix)\n",
" if iteration % 5 == 4:\n",
" m = np.max( matrix**2 - matrix) - np.min( matrix**2 - matrix)\n",
" #* print(\"m = \", m)\n",
" if m == 0:\n",
" print(\"Stop at iteration %s\" % iteration)\n",
" return True\n",
" return False\n",
"\n",
"\n",
"def markov_chain(M, max_loop = 10):\n",
" expand_factor = 2\n",
" inflate_factor = 2\n",
" diag_factor = 1\n",
" \n",
" M = M + diag_factor * np.identity(M.shape[0]) #* add self-loops to the matrix by setting diagonal 1\n",
" #* print(\"My M after diagonalization\", M)\n",
" M = normalize_cols(M)\n",
" \n",
" for i in range(max_loop):\n",
" M = expand_matrix(M, expand_factor) #* expand by raising the matrix to the given power\n",
" M = inflate_matrix(M, inflate_factor) #* inflate the given matrix by raising each element to the given power\n",
" if stop_condition(M, i): #* if values 'converged' to ones (1) → stop the markov algorithm\n",
" break\n",
"\n",
" clusters = get_clusters(M)\n",
" return M, clusters\n",
"\n",
"def networkx_markov_chain(graph, max_loop=75):\n",
" A = np.array(nx.adjacency_matrix(graph).todense())\n",
" return markov_chain(A, max_loop)\n",
"\n",
"def draw_graph(graph, cluster_map, arrows):\n",
" _, _ = plt.subplots(figsize=(15,8))\n",
" graph = nx.Graph(graph)\n",
" clust_map = {v: k for k, vals in cluster_map.items() for v in vals} \n",
" colors = [clust_map.get(i, 100) for i in range(len(graph.nodes()))]\n",
" nx.draw_networkx(graph, node_color=colors, linewidths=5, arrows=arrows, cmap='gist_rainbow')\n",
" axis(\"off\")\n",
" show(block=False)\n",
"\n",
"def calculate_and_draw(graph, arrows=None): \n",
" M = nx.to_numpy_matrix(graph)\n",
" print(\"Nodes number: %s\\n\" % M.shape[0])\n",
" \n",
" M, clusters = networkx_markov_chain(graph)\n",
" print(f\"\\nClustering result:\")\n",
" for key, value in clusters.items():\n",
" print(key, \": \", value) \n",
" \n",
" draw_graph(graph, clusters, arrows)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 987
},
"id": "UQX13SKKbrUA",
"outputId": "ca417f85-a614-4265-c2b5-88a09878e3e7"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodes number: 16\n",
"\n",
"Stop at iteration 14\n",
"Matrix to 'cluster':\n",
" [[1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 1. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 1. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]\n",
"\n",
"Clustering result:\n",
"0 : [0, 1]\n",
"1 : [2, 3]\n",
"2 : [4, 5]\n",
"3 : [6, 7]\n",
"4 : [8, 9]\n",
"5 : [10, 12]\n",
"6 : [11, 13]\n",
"7 : [14, 15]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1MAAAHBCAYAAACMieH9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd5icdbn/8fedQgIkAZbemxDY0EGQ3ixIMYCAKHDkBAxVDh4VCyCoqNgLHsQVIyL2gutB/HkUJaAUQTqBAEoHaRtIgARS7t8fz8TNJltnn92ZnX2/rmuuTWae5957Q7LMZ78tMhNJkiRJUt+MqHUDkiRJkjQUGaYkSZIkqQqGKUmSJEmqgmFKkiRJkqpgmJIkSZKkKhimJEmSJKkKhilJkiRJqoJhSpIkSZKqYJiSJEmSpCoYpiRJkiSpCoYpSZIkSaqCYUqSJEmSqmCYkiRJkqQqGKYkSZIkqQqGKUmSJEmqgmFKkiRJkqpgmJIkSZKkKhimJEmSJKkKhilJkiRJqoJhSpIkSZKqYJiSJEmSpCoYpiRJkiSpCoYpSZIkSaqCYUqSJEmSqmCYkiRJkqQqGKYkSZIkqQqGKUmSJEmqgmFKkiRJkqpgmJIkSZKkKhimJEmSJKkKhilJkiRJqoJhSpIkSZKqMKrWDUiSJEnVCCYGsDOwHdAEBPAiMAO4Ppm5sIbtaRiIzKx1D5IkSVKvBRMnAMcBpwLNXVz2KHAJ8N1k5nOD1ZuGF8OUJEmShoxg4gnAV4AJvbzldeBTwGeTmb7xVakMU5IkSap7lSl9nwU+WmWJK4D/TGYuKK8rDXduQCFJkqSh4ONUH6QAjgUuroQyqRSOTEmSJKmuBRPfCvy+pHLvS2ZeWlItDXOGKUmSJNW1YOJfgN07fXHcgx1/Pzfh1JXhojW6KvcYsIk7/akMbo0uSZKkuhVM3JaughTAy5st8etFsNY/4Mhx3ZXcADgQ+N9yOtRw5popSZIk1bNTen3lL+fAGqNgz+V7uvK0fnUkVRimJEmSVM8O7/WV358N/zEeosc9Jt4STOx2+ErqDcOUJEmS6lIwcSyweq8ufnQ+TJ8L712pN1ePANbpR2sSYJiSJElS/ertwbzwg9mwx/Kw8eje3tGr1CV1xzAlSZKkejWv11dePhve2/vsBcztczfSUgxTkiRJqldz6E2gumEuPLkAjhzfl9rPVtuUtJhhSpIkSXUpmZnAtT1e+P3ZcPg4GN/rt7b3JTMNU+o3z5mSJElSPbsEOKDbK769ZjU1pX6LzKx1D5IkSVKngomjgH8C65dU8lVg3WTmiyXV0zDmND9JkiTVr3hgVb7cNqvEitMMUiqLYUqSJEl1JwrHAHdx7gv/j4X55xLK3g2cXUIdCXDNlCRJkupMRKxLsa5pQ+CgfHXRrcHElYBrgB2rLPswcFAyc3ZJbUqOTEmSJKk+VEajTgTuAG4FdsrMWwGSmS8B+wBXVVH6ZmDXZObjZfUqgRtQSJIkqQ5ExEbAd4CVgSmZeXen1zExgEOA04G39FD2JuBi4MfJzAWlNStVGKYkSZJUMxExAjgVOB/4AvCVzOxV8Akmbg4cD+wArEIx62oWMAO4PJl52wC0LP2bYUqSJEk1ERGbAd8FRlKMRs2scUtSn7hmSpIkSYMqIkZGxAeBG4FfAHsZpDQUuZufJEmSBk1ETAKmAa8AO2fmP2vcklQ1R6YkSZI04CJidEScDVxLEabebJDSUOfIlCRJkgZURGxPEaD+BeyYmY/VuCWpFI5MSZIkaUBExJiIuAD4PfA14ECDlBqJI1OSJEkqXUTsQjEa9QCwbWY+XeOWpNIZpiRJklSaiFgB+BRwLHAG8PP0LB41KKf5SZIkqRQRsRdwJ7AOsHVm/swgpUbmyJQkSZL6JSLGARcChwGnZmZrjVuSBoUjU5IkSapaRLwZuBtYAdjKIKXhxJEpSZIk9VlErAR8CXgrMDUzf1/jlqRB58iUJEmS+iQiDgbuAeZTrI0ySGlYcmRKkiRJvRIRqwJfB94EHJeZ19a2I6m2DFOSJEkNKpgYwHrA6sAY4CXg8WTmnD7XijgCuAj4McW5Ua+U2as0FIW7VUqSJDWWYOKawAnAVGDDpV5eBPwOuBj4fTJzYbe1ItYE/geYBEzJzBvL71gamlwzJUmS1CCCiWsEEy8DHgc+w7JBCor3fwcBvwUeDCYe12mtwrHAXcADwPYGKakjR6YkSZIaQDBxC4oRp42quP1rwAeTmYsAImI94BJgfYrRqL+X1afUSByZkiRJGuKCiZsA06kuSAGcCVwU568WEXEicDvwN+CNBimpa25AIUmSNIQFE5enmLK3Rj9LnUrmfsDLwH6ZeXe/m5ManNP8JEmShrBg4geAr5RSbN6iefxt3lq51+MvlVJPanBO85MkSRqigokjgFN7vPAns2HLR2DFB2HTh+H6Vzu/buyIsey1wtGlNik1MEemJEmShqhg4luB33d70R9egROfgZ+uDTuPhacXFM+vO7qrO+4Ctktm+iZR6oEjU5IkSUNXp9uad3DeC/CJVeFNy8OIKEJU10EKYBtg67IalBqZYUqSJGnomtTtqwsTbp0Hzy2ENzwM6/0TTn8G5i7qqW5zaR1KDczd/CRJGkamEUFxdtCqwGjgJeCxKeTcmjamaq3c7avPLIT5wC/mwPXrw+iAyU/CBW3wmdW6u3OVMpuUGpVhSpKkYWAasR4wFTgBWGepl+dPI64ELgaum4ILqoeQ7oeYlo/i4/tXhrUrb/v+e5XehKmFpXQnNTin+UmS1MCmEetNI34KPAKcy7JBCooRqqOAa4F7phGHDFqD6q+2bl9dZSSsN4piQLIiur58CbP605Q0XBimJElqUNOIHYBbKILSyF7e1gz8Zhrx8Wkd3oGrTv29xyv+cwJcNAueXQCzFsJXX4SDV+zprttK6U5qcIYpSZIa0DRia+DPwFpVlvgMxUiW6tu0Hq84d1V441jY/JHirKntx8DZTd3dMT2Z+Y+S+pMamudMSZLUYKYRTcCdwHollDtqCvnzEupogMT8zW9jdGxfYsl3JTN/VmI9qWE5MiVJUuP5EOUEKYCvTCPcsKoORcSoiDiNU595Q4llnwZ+XWI9qaEZpiRJaiDTiDHA+7q75gv7wElj4dRxxePjE7stuR5wcHkdqgwRsR9wO/BOfvHynsD0EsomcEoy8/USaknDgj9pkiSpsRwBdLvnNcAx34S9Tux1zVNxtKIuRMQmwJeA7YAPAr/OWQszmHg4cD39O2z3g8nM1hLalIYNR6YkSWosxw1AzbdMI9YegLrqpYgYFxGfAf5GsUNjc2ZemZXF78nMNmBv4MYqyi+iGJH6amkNS8OEYUqSpMbSq5GJX34M/ms1+NzucP+15dVVuSJiREQcB9wPrA9sm5mfy8x5S1+bzHwe2Bf4GPBkLz/F/wP2SGZeUlbP0nDiND9JkhrLKj1dcMTnYe1mGLUc/O0n8I1D4Pw7YI1N+1dX5YqIXYCvUxyze0Rm3tTTPcnM14ALg4lfAg4BTgb2BJZf4rLHgZ8C305mPlR649Iw4tbokiQ1kGnES8CEvtzz1QNgm4Ng//d3e9nhU8gr+9Obeici1gY+B7wF+Djwg8xcVHU9JgZFmBoLzE5mLiilUUmOTEmS1GDa6GOYIqAXP1udVWU/6qWIGAucSbG1/XeALTJzTn/rJjMTeLXykFQi10xJktRYbu/uxVdfhHt+D/PnwcIFcNMP4YHrYKsDuq25ELirzCbVLgqTgXuBNwG7ZObHyghSkgaWI1OSJDWWacBhXb24cD5ceQ48fT+MGAlrbwGn/xrW2rzbmldOIdvKblQQEZOArwHrACdn5h9q3JKkPnDNlCRJDWQaMRL4B7BhiWX3m0L+ucR6w15ENAGfBN4FfBr4Vma6lkkaYpzmJ0lSA5lCLgQuLrHkDODaEusNaxExKiJOBe6jeB/WnJkXGaSkockwJUlS47mIEtY4LVpAznme/5rSm+0p1KOI2I9iTdsRwJsz87TMfL7GbUnqB6f5SZLUgKYR6wI3Uhz0WpVff
"text/plain": [
"<Figure size 1080x576 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"bin_graph = nx.binomial_tree(4) \n",
"calculate_and_draw(bin_graph)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 883
},
"id": "FCc0vJOpbrWX",
"outputId": "cb2e2458-f7b5-4f63-f1a0-7d0fec5a4b97"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodes number: 15\n",
"\n",
"Matrix to 'cluster':\n",
" [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0.5 0. 1. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0.5 0. 0. 1. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 1. 0. 0. ]\n",
" [1. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 1. 1. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]]\n",
"\n",
"Clustering result:\n",
"0 : [1, 3, 7, 8]\n",
"1 : [1, 4, 9, 10]\n",
"2 : [5, 11, 12]\n",
"3 : [0, 2, 6, 13, 14]\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1080x576 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"balanced_graph = nx.balanced_tree(2,3) # perfectly balanced \n",
"calculate_and_draw(balanced_graph)"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "_z3yxmBRbrZi",
"outputId": "f6ebfd7b-4b9b-4e1b-c027-468f047dc470"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodes number: 31\n",
"\n",
"Stop at iteration 69\n",
"Matrix to 'cluster':\n",
" [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.\n",
" 1. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 1. 1. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 1. 1. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 1. 1.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0.]]\n",
"\n",
"Clustering result:\n",
"0 : [0, 1]\n",
"1 : [2]\n",
"2 : [3, 7, 15, 16]\n",
"3 : [8, 17, 18]\n",
"4 : [9, 19, 20]\n",
"5 : [4, 10, 21, 22]\n",
"6 : [5, 11, 23, 24]\n",
"7 : [12, 25, 26]\n",
"8 : [13, 27, 28]\n",
"9 : [6, 14, 29, 30]\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1080x576 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"balanced_graph = nx.balanced_tree(2,4) \n",
"calculate_and_draw(balanced_graph)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 831
},
"id": "BNvzdWwZbriE",
"outputId": "6a233a07-9593-4178-88fa-3f9c0144f268"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodes number: 10\n",
"\n",
"Stop at iteration 14\n",
"Matrix to 'cluster':\n",
" [[1. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 1. 1. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 1. 0. 1. 1. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n",
" [0. 0. 0. 1. 0. 0. 0. 0. 0. 1.]]\n",
"\n",
"Clustering result:\n",
"0 : [0, 5]\n",
"1 : [1, 2]\n",
"2 : [4, 6, 7]\n",
"3 : [8]\n",
"4 : [3, 9]\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1080x576 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"random_tree = nx.random_tree(10) # uniformly random tree \n",
"calculate_and_draw(random_tree)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Directed graph"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "eiHmTzgNbrer",
"outputId": "bd4baaea-afa9-4732-907d-12973bfe10b4"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodes number: 10\n",
"\n",
"Matrix to 'cluster':\n",
" [[0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. ]\n",
" [0.5 1. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. ]\n",
" [0. 0. 0.33333333 0. 1. 0.\n",
" 0. 0. 0. 0. ]\n",
" [0. 0. 0.33333333 0. 0. 1.\n",
" 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. ]\n",
" [0.5 0. 0. 0. 0. 0.\n",
" 0. 1. 0. 0. ]\n",
" [0. 0. 0.33333333 0. 0. 0.\n",
" 0. 0. 1. 0. ]\n",
" [0. 0. 0. 1. 0. 0.\n",
" 1. 0. 0. 1. ]]\n",
"\n",
"Clustering result:\n",
"0 : [0, 1]\n",
"1 : [2, 4]\n",
"2 : [2, 5]\n",
"3 : [0, 7]\n",
"4 : [2, 8]\n",
"5 : [3, 6, 9]\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1080x576 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gn_graph = nx.gn_graph(10) # growing network digraph \n",
"calculate_and_draw(gn_graph, arrows=True)"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"id": "cF-t3FQxySUP"
},
"outputs": [],
"source": []
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "random-walks-mpsic",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}