{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import networkx as nx\n", "import numpy as np\n", "import scipy.stats\n", "import pickle\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def KLD_entropy(graph, characteristic, characteristic_random_logprob):\n", " degree_total_g = sum(graph.degree().values())\n", " n = len(graph.nodes())\n", " p = float(degree_total_g) / float(n) / float(n-1)\n", " #random_graph = nx.erdos_renyi_graph(n, p)\n", " a = characteristic(graph)\n", " b = characteristic_random_logprob(n, p)\n", " a_non_zero = a[np.nonzero(a)]\n", " S = 0\n", " S += np.sum(np.multiply(a_non_zero, np.log(a_non_zero)))\n", " S += np.sum(np.multiply(-a, b))\n", " return S" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def KLD_entropy_laplacian(graph, characteristic, characteristic_random_log):\n", " degree_total_g = sum(graph.degree().values())\n", " n = len(graph.nodes())\n", " p = float(degree_total_g) / float(n) / float(n-1)\n", " random_graph = nx.erdos_renyi_graph(n, p)\n", " a = characteristic(graph)\n", " b = characteristic_random_log(random_graph)\n", " a_non_zero = a[np.nonzero(a)]\n", " S = 0\n", " S += np.sum(np.multiply(a_non_zero, np.log(a_non_zero)))\n", " S += np.sum(np.multiply(-a, b))\n", " return S" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def degree_distribution(graph):\n", " a = np.bincount(graph.degree().values())\n", " a.resize(len(graph.nodes()))\n", " a = a.astype(np.float)\n", " a = np.divide(a, np.sum(a))\n", " return a" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def degree_distribution_random_logprob(n, p):\n", " pdf = []\n", " for i in xrange(n):\n", " pdf.append(scipy.stats.binom.logpmf(i, n-1, p))\n", " \n", " pdf = np.array(pdf)\n", " \n", " pdf[pdf == -np.inf] = np.iinfo(np.int).min\n", " \n", " return pdf" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [], "source": [ "n = 2000\n", "K_5 = nx.complete_graph(n)\n", "maze=nx.sedgewick_maze_graph()\n", "k_reg = nx.random_regular_graph(n/2, n)\n", "bull = nx.bull_graph()\n", "small_world = nx.newman_watts_strogatz_graph(n, 2, 0.1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "rg = nx.erdos_renyi_graph(n, 0.1)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "0.55557896989140321" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "KLD_entropy(small_world, degree_distribution, degree_distribution_random_logprob)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def laplacian_spectrum_log(graph):\n", " return np.log(laplacian_spectrum(graph))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def laplacian_spectrum(graph):\n", " a = nx.laplacian_spectrum(graph)\n", " a /= sum(a)\n", " a[a <= 0] = np.finfo(np.float).tiny\n", " return a" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def adjacency_spectrum_log(graph):\n", " return np.log(adjacency_spectrum(graph))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def adjacency_spectrum(graph):\n", " a = nx.adjacency_spectrum(graph)\n", " a /= sum(a)\n", " a[a <= 0] = np.finfo(np.float).tiny" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "entropies = []\n", "for i in range(10):\n", " entropies.append(KLD_entropy_laplacian(small_world, laplacian_spectrum, laplacian_spectrum_log))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "1.2355298355126763" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(entropies)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0.21417269955406329" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.std(entropies)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "KLD_entropy_laplacian(small_world, adjacency_spectrum, adjacency_spectrum_log)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }