diff --git a/Alpha_complex.ipynb b/Alpha_complex.ipynb new file mode 100644 index 0000000..0c7d9a3 --- /dev/null +++ b/Alpha_complex.ipynb @@ -0,0 +1,488 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a511d8f2c7a44995a4138f06947d23b5", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(Figure(camera_center=[0.0, 0.0, 0.0], height=500, matrix_projection=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], matrix_world=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], scatters=[Scatter(color_selected=array('white', \n", + " dtype='Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(Figure(camera_center=[0.0, 0.0, 0.0], height=500, matrix_projection=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], matrix_world=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], scatters=[Scatter(color_selected=array('white', \n", + " dtype='Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(Figure(camera_center=[0.0, 0.0, 0.0], height=500, matrix_projection=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], matrix_world=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], scatters=[Scatter(color_selected=array('white', \n", + " dtype='" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.patches as mpatches\n", + "\n", + "alpha_complex = gudhi.AlphaComplex(points=points)\n", + "simplex_tree = alpha_complex.create_simplex_tree()\n", + "diag = simplex_tree.persistence()\n", + "plt = gudhi.plot_persistence_diagram(diag, max_plots=100)\n", + "\n", + "# some legends\n", + "dim0 = mpatches.Patch(color='#ff0000', label='Dimension 0')\n", + "dim1 = mpatches.Patch(color='#00ff00', label='Dimension 1')\n", + "dim2 = mpatches.Patch(color='#0000ff', label='Dimension 2')\n", + "dim3 = mpatches.Patch(color='#00ffff', label='Dimension 3')\n", + "plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0., handles=[dim0, dim1, dim2, dim3])\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "7099" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simplex_tree.num_simplices()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# max_edge_length\n", + "rips_complex = gudhi.RipsComplex(points=points)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "79375495" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stree = rips_complex.create_simplex_tree(max_dimension=4)\n", + "stree.num_simplices()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "diag = stree.persistence()\n", + "plt = gudhi.plot_persistence_diagram(diag, max_plots=100)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nYGa/574AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/BottleneckDistance.ipynb b/BottleneckDistance.ipynb new file mode 100644 index 0000000..52f98fb --- /dev/null +++ b/BottleneckDistance.ipynb @@ -0,0 +1,517 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "\n", + "(function(root) {\n", + " function now() {\n", + " return new Date();\n", + " }\n", + "\n", + " var force = true;\n", + "\n", + " if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n", + " root._bokeh_onload_callbacks = [];\n", + " root._bokeh_is_loading = undefined;\n", + " }\n", + "\n", + " var JS_MIME_TYPE = 'application/javascript';\n", + " var HTML_MIME_TYPE = 'text/html';\n", + " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", + " var CLASS_NAME = 'output_bokeh rendered_html';\n", + "\n", + " /**\n", + " * Render data to the DOM node\n", + " */\n", + " function render(props, node) {\n", + " var script = document.createElement(\"script\");\n", + " node.appendChild(script);\n", + " }\n", + "\n", + " /**\n", + " * Handle when an output is cleared or removed\n", + " */\n", + " function handleClearOutput(event, handle) {\n", + " var cell = handle.cell;\n", + "\n", + " var id = cell.output_area._bokeh_element_id;\n", + " var server_id = cell.output_area._bokeh_server_id;\n", + " // Clean up Bokeh references\n", + " if (id !== undefined) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + "\n", + " if (server_id !== undefined) {\n", + " // Clean up Bokeh references\n", + " var cmd = \"from bokeh.io import _state; print(_state.uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", + " cell.notebook.kernel.execute(cmd, {\n", + " iopub: {\n", + " output: function(msg) {\n", + " var element_id = msg.content.text.trim();\n", + " Bokeh.index[element_id].model.document.clear();\n", + " delete Bokeh.index[element_id];\n", + " }\n", + " }\n", + " });\n", + " // Destroy server and session\n", + " var cmd = \"from bokeh import io; io._destroy_server('\" + server_id + \"')\";\n", + " cell.notebook.kernel.execute(cmd);\n", + " }\n", + " }\n", + "\n", + " /**\n", + " * Handle when a new output is added\n", + " */\n", + " function handleAddOutput(event, handle) {\n", + " var output_area = handle.output_area;\n", + " var output = handle.output;\n", + "\n", + " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", + " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", + " return\n", + " }\n", + "\n", + " var toinsert = output_area.element.find(`.${CLASS_NAME.split(' ')[0]}`);\n", + "\n", + " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", + " toinsert[0].firstChild.textContent = output.data[JS_MIME_TYPE];\n", + " // store reference to embed id on output_area\n", + " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", + " }\n", + " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", + " var bk_div = document.createElement(\"div\");\n", + " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var script_attrs = bk_div.children[0].attributes;\n", + " for (var i = 0; i < script_attrs.length; i++) {\n", + " toinsert[0].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", + " }\n", + " // store reference to server id on output_area\n", + " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", + " }\n", + " }\n", + "\n", + " function register_renderer(events, OutputArea) {\n", + "\n", + " function append_mime(data, metadata, element) {\n", + " // create a DOM node to render to\n", + " var toinsert = this.create_output_subarea(\n", + " metadata,\n", + " CLASS_NAME,\n", + " EXEC_MIME_TYPE\n", + " );\n", + " this.keyboard_manager.register_events(toinsert);\n", + " // Render to node\n", + " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", + " render(props, toinsert[0]);\n", + " element.append(toinsert);\n", + " return toinsert\n", + " }\n", + "\n", + " /* Handle when an output is cleared or removed */\n", + " events.on('clear_output.CodeCell', handleClearOutput);\n", + " events.on('delete.Cell', handleClearOutput);\n", + "\n", + " /* Handle when a new output is added */\n", + " events.on('output_added.OutputArea', handleAddOutput);\n", + "\n", + " /**\n", + " * Register the mime type and append_mime function with output_area\n", + " */\n", + " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", + " /* Is output safe? */\n", + " safe: true,\n", + " /* Index of renderer in `output_area.display_order` */\n", + " index: 0\n", + " });\n", + " }\n", + "\n", + " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", + " if (root.Jupyter !== undefined) {\n", + " var events = require('base/js/events');\n", + " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", + "\n", + " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", + " register_renderer(events, OutputArea);\n", + " }\n", + " }\n", + "\n", + " \n", + " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", + " root._bokeh_timeout = Date.now() + 5000;\n", + " root._bokeh_failed_load = false;\n", + " }\n", + "\n", + " var NB_LOAD_WARNING = {'data': {'text/html':\n", + " \"
\\n\"+\n", + " \"

\\n\"+\n", + " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", + " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", + " \"

\\n\"+\n", + " \"
    \\n\"+\n", + " \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n", + " \"
  • use INLINE resources instead, as so:
  • \\n\"+\n", + " \"
\\n\"+\n", + " \"\\n\"+\n", + " \"from bokeh.resources import INLINE\\n\"+\n", + " \"output_notebook(resources=INLINE)\\n\"+\n", + " \"\\n\"+\n", + " \"
\"}};\n", + "\n", + " function display_loaded() {\n", + " var el = document.getElementById(\"eea0009b-d35e-494d-a6d5-094996fd1099\");\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS is loading...\";\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", + " }\n", + " } else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(display_loaded, 100)\n", + " }\n", + " }\n", + "\n", + "\n", + " function run_callbacks() {\n", + " try {\n", + " root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", + " }\n", + " finally {\n", + " delete root._bokeh_onload_callbacks\n", + " }\n", + " console.info(\"Bokeh: all callbacks have finished\");\n", + " }\n", + "\n", + " function load_libs(js_urls, callback) {\n", + " root._bokeh_onload_callbacks.push(callback);\n", + " if (root._bokeh_is_loading > 0) {\n", + " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", + " return null;\n", + " }\n", + " if (js_urls == null || js_urls.length === 0) {\n", + " run_callbacks();\n", + " return null;\n", + " }\n", + " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", + " root._bokeh_is_loading = js_urls.length;\n", + " for (var i = 0; i < js_urls.length; i++) {\n", + " var url = js_urls[i];\n", + " var s = document.createElement('script');\n", + " s.src = url;\n", + " s.async = false;\n", + " s.onreadystatechange = s.onload = function() {\n", + " root._bokeh_is_loading--;\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", + " run_callbacks()\n", + " }\n", + " };\n", + " s.onerror = function() {\n", + " console.warn(\"failed to load library \" + url);\n", + " };\n", + " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", + " }\n", + " };var element = document.getElementById(\"eea0009b-d35e-494d-a6d5-094996fd1099\");\n", + " if (element == null) {\n", + " console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'eea0009b-d35e-494d-a6d5-094996fd1099' but no matching script tag was found. \")\n", + " return false;\n", + " }\n", + "\n", + " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.9.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.9.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.9.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.9.min.js\"];\n", + "\n", + " var inline_js = [\n", + " function(Bokeh) {\n", + " Bokeh.set_log_level(\"info\");\n", + " },\n", + " \n", + " function(Bokeh) {\n", + " \n", + " },\n", + " function(Bokeh) {\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.9.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.9.min.css\");\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.9.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.9.min.css\");\n", + " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.9.min.css\");\n", + " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.9.min.css\");\n", + " }\n", + " ];\n", + "\n", + " function run_inline_js() {\n", + " \n", + " if ((root.Bokeh !== undefined) || (force === true)) {\n", + " for (var i = 0; i < inline_js.length; i++) {\n", + " inline_js[i].call(root, root.Bokeh);\n", + " }if (force === true) {\n", + " display_loaded();\n", + " }} else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(run_inline_js, 100);\n", + " } else if (!root._bokeh_failed_load) {\n", + " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", + " root._bokeh_failed_load = true;\n", + " } else if (force !== true) {\n", + " var cell = $(document.getElementById(\"eea0009b-d35e-494d-a6d5-094996fd1099\")).parents('.cell').data().cell;\n", + " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", + " }\n", + "\n", + " }\n", + "\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", + " run_inline_js();\n", + " } else {\n", + " load_libs(js_urls, function() {\n", + " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", + " run_inline_js();\n", + " });\n", + " }\n", + "}(window));" + ], + "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"eea0009b-d35e-494d-a6d5-094996fd1099\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"eea0009b-d35e-494d-a6d5-094996fd1099\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'eea0009b-d35e-494d-a6d5-094996fd1099' but no matching script tag was found. \")\n return false;\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.9.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.9.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.9.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.9.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.9.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.9.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.9.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.9.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.9.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.9.min.css\");\n }\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"eea0009b-d35e-494d-a6d5-094996fd1099\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from bokeh.plotting import figure, show, output_notebook\n", + "output_notebook()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bottleneck distance" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " var docs_json = {\"0cc949ce-e183-4264-8539-af129743c557\":{\"roots\":{\"references\":[{\"attributes\":{\"source\":{\"id\":\"c61e0779-8e0b-4989-9ac2-92bd15ed3eae\",\"type\":\"ColumnDataSource\"}},\"id\":\"5e0400b0-dc78-4ac0-8d58-32d61804368c\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"d42e226d-7b10-4826-ad73-43376ccb184d\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[-0.660728409435627,-2.0455025488474763,6.105966761158102,0.1562387099200323,-3.479998636211153,3.669662049280282,5.276360382042358,5.8149609049621995,-1.5884825217042615,1.4859308741137478,-2.7895414464028936,6.339610462607656,-2.7389971156752906,-3.4169988254017882,-2.92031217447413,6.4048554363284,-0.5889107493217565,-3.0079292638981925,-0.09986381098331176,1.1517375906608702,0.3213955551175477,-1.8825648058838238,-1.018276256263926,-0.5117393546158583,5.134873282204319,4.278620588319688,3.7956293835590498,-3.8335595968925618,6.050276941368986,-1.9006452686663498],\"y\":[-3.117883890283563,4.8031223759189245,2.536857153432804,6.190317362588123,-0.4644184498413893,-3.0654332157473894,3.934762258166766,3.3780553553639585,5.359594550707474,-3.980863107352891,-1.657016471217231,1.8861506361445,4.05646831909476,3.502475022242015,-1.9117758952691668,1.7309464795911371,-3.4282278058880817,-0.8098580768659704,-3.5134200163035647,6.284043607594644,6.000115235017093,5.534524569071589,-3.346898899769872,5.936770979436756,4.011835030672653,-3.0383714859986304,5.643778335021091,0.821988491267835,0.36277866435180184,-2.6063491973153092]}},\"id\":\"c61e0779-8e0b-4989-9ac2-92bd15ed3eae\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"plot\":{\"id\":\"8db7355b-8c31-4e0f-818c-0275440c31ee\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0cfa57b8-3f91-45a1-a217-9c4cf973f398\",\"type\":\"BasicTicker\"}},\"id\":\"211ae88e-9b99-4543-b59c-21c2d78a39d8\",\"type\":\"Grid\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"2d8b2f77-e944-4331-b7b3-2e828355f990\",\"type\":\"PanTool\"},{\"id\":\"d42e226d-7b10-4826-ad73-43376ccb184d\",\"type\":\"WheelZoomTool\"},{\"id\":\"6d70a493-c4f3-4767-b222-e69d2ae26ee8\",\"type\":\"BoxZoomTool\"},{\"id\":\"c0cacd5e-aaff-408d-a3c2-471baa398770\",\"type\":\"SaveTool\"},{\"id\":\"e65e3836-71d1-43cc-bf3c-2c46ff51d5f1\",\"type\":\"ResetTool\"},{\"id\":\"86ebdd82-ab06-4db1-bff2-1739b8b677ed\",\"type\":\"HelpTool\"}]},\"id\":\"1b6f48c8-a770-475f-8045-5eedf591f877\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"725d28c1-db98-48bd-b9ae-8793f0874e2c\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"navy\"},\"line_color\":{\"value\":\"navy\"},\"size\":{\"units\":\"screen\",\"value\":2},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"80db6327-fa30-474b-afac-ef0715a239c3\",\"type\":\"Circle\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"2fd02caf-87fb-4d99-9ced-8d42add6ac7c\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data_source\":{\"id\":\"c61e0779-8e0b-4989-9ac2-92bd15ed3eae\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"4e273aee-a41f-485d-9757-f931442e4d6f\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"458c5a33-e1b3-49fa-9212-90d68f084b10\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"5e0400b0-dc78-4ac0-8d58-32d61804368c\",\"type\":\"CDSView\"}},\"id\":\"2c26a570-b5ef-4006-a468-8ef0b93fba03\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":2},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"fe650778-5088-47ce-8b29-4aa1949a97f0\",\"type\":\"Circle\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"x\",\"y\"],\"data\":{\"x\":[0.2671150452134961,8.487960324569736,9.121208778940119,9.42871038544737,11.224363870720914,2.7915800109177074,2.5475841653598597,2.30768803411799,0.9157563883399977,0.8570879311305526,10.424875397263994,2.766266624116019,2.4909262664071012,10.167786748401824,0.2545992997301317,9.922741614712379,10.227492877880254,7.506108842763059,7.242093629716353,5.02898953829948,8.214876598953024,11.23139329628768,10.56802982461563,5.417627186042862,4.900069369812551,11.039477152808866,10.644608079008526,8.986943634615441,9.069191628810719,8.088498750478019,4.571235130562765,0.22311226251670496,8.396823358375851,10.314579446933061,7.799765849220153,8.230228941174891,9.966965375450167,2.8934732584772713,1.957027990593455,6.4212814602658455],\"y\":[6.645739190404328,2.968778124803024,10.823344288436095,4.429035554830724,7.943067652155239,4.8435766372849445,10.610153975629085,4.70739631580526,10.149204858076123,10.622831737729113,5.88757447774411,3.405948152481493,4.016798833536178,11.122100315671752,6.325939335647296,11.55470700348165,6.060454304853731,3.5559991084730767,13.077610114687388,2.600736562249028,11.212768982281467,7.839050525749776,8.447177259759913,2.7063310205473154,3.2651291476901725,8.086517193309756,6.138516132724228,10.488168423581719,3.641469109024834,3.4831983106582562,11.884379351042167,8.386643905279142,12.065658763104286,8.735465107902655,2.8416328532765425,2.685433614002278,9.941989904190779,3.3428648496597546,10.708940389017645,2.5382120994830855]}},\"id\":\"c1871500-0107-4ae0-9c93-8047356b464e\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"formatter\":{\"id\":\"2b20b433-4bac-4e96-a477-d273ab67d0a1\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"8db7355b-8c31-4e0f-818c-0275440c31ee\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0cfa57b8-3f91-45a1-a217-9c4cf973f398\",\"type\":\"BasicTicker\"}},\"id\":\"9b875983-45cb-4527-853c-9ee9b91a6a67\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e65e3836-71d1-43cc-bf3c-2c46ff51d5f1\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"units\":\"screen\",\"value\":2},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4e273aee-a41f-485d-9757-f931442e4d6f\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"86ebdd82-ab06-4db1-bff2-1739b8b677ed\",\"type\":\"HelpTool\"},{\"attributes\":{\"formatter\":{\"id\":\"2167e91a-fc2d-4660-b1fc-cdbe28f441ae\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"8db7355b-8c31-4e0f-818c-0275440c31ee\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"de632ac6-73c1-4cc7-9883-51e2aaa12044\",\"type\":\"BasicTicker\"}},\"id\":\"a4326dd4-4cdb-42a5-812c-44ac008e8b1a\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2d8b2f77-e944-4331-b7b3-2e828355f990\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"c0cacd5e-aaff-408d-a3c2-471baa398770\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"0cfa57b8-3f91-45a1-a217-9c4cf973f398\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2167e91a-fc2d-4660-b1fc-cdbe28f441ae\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2b20b433-4bac-4e96-a477-d273ab67d0a1\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"de632ac6-73c1-4cc7-9883-51e2aaa12044\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"c1871500-0107-4ae0-9c93-8047356b464e\",\"type\":\"ColumnDataSource\"}},\"id\":\"92c8df8f-ecac-4020-bf8c-1b8eab8d41e7\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null},\"id\":\"5175df62-4833-4d92-b61a-199d13f8bc40\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"c1871500-0107-4ae0-9c93-8047356b464e\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"80db6327-fa30-474b-afac-ef0715a239c3\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"fe650778-5088-47ce-8b29-4aa1949a97f0\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"92c8df8f-ecac-4020-bf8c-1b8eab8d41e7\",\"type\":\"CDSView\"}},\"id\":\"aca23c15-86f6-4e9c-aadb-27e4dd4909b1\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"units\":\"screen\",\"value\":2},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"458c5a33-e1b3-49fa-9212-90d68f084b10\",\"type\":\"Circle\"},{\"attributes\":{\"overlay\":{\"id\":\"2fd02caf-87fb-4d99-9ced-8d42add6ac7c\",\"type\":\"BoxAnnotation\"}},\"id\":\"6d70a493-c4f3-4767-b222-e69d2ae26ee8\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"0190a2ee-e8ce-4121-aa0b-5cd83c605208\",\"type\":\"LinearScale\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"8db7355b-8c31-4e0f-818c-0275440c31ee\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"de632ac6-73c1-4cc7-9883-51e2aaa12044\",\"type\":\"BasicTicker\"}},\"id\":\"03bd19e9-8ed9-4d99-a087-9cd76808f0cf\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null},\"id\":\"9abcc51b-4f51-4cb7-8c8d-7cd6910885b7\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"9b875983-45cb-4527-853c-9ee9b91a6a67\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"a4326dd4-4cdb-42a5-812c-44ac008e8b1a\",\"type\":\"LinearAxis\"}],\"plot_height\":400,\"plot_width\":400,\"renderers\":[{\"id\":\"9b875983-45cb-4527-853c-9ee9b91a6a67\",\"type\":\"LinearAxis\"},{\"id\":\"211ae88e-9b99-4543-b59c-21c2d78a39d8\",\"type\":\"Grid\"},{\"id\":\"a4326dd4-4cdb-42a5-812c-44ac008e8b1a\",\"type\":\"LinearAxis\"},{\"id\":\"03bd19e9-8ed9-4d99-a087-9cd76808f0cf\",\"type\":\"Grid\"},{\"id\":\"2fd02caf-87fb-4d99-9ced-8d42add6ac7c\",\"type\":\"BoxAnnotation\"},{\"id\":\"aca23c15-86f6-4e9c-aadb-27e4dd4909b1\",\"type\":\"GlyphRenderer\"},{\"id\":\"2c26a570-b5ef-4006-a468-8ef0b93fba03\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"40bcac6c-f3c1-48a4-bc74-74194a77aa3e\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1b6f48c8-a770-475f-8045-5eedf591f877\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"9abcc51b-4f51-4cb7-8c8d-7cd6910885b7\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"725d28c1-db98-48bd-b9ae-8793f0874e2c\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5175df62-4833-4d92-b61a-199d13f8bc40\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"0190a2ee-e8ce-4121-aa0b-5cd83c605208\",\"type\":\"LinearScale\"}},\"id\":\"8db7355b-8c31-4e0f-818c-0275440c31ee\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"40bcac6c-f3c1-48a4-bc74-74194a77aa3e\",\"type\":\"Title\"}],\"root_ids\":[\"8db7355b-8c31-4e0f-818c-0275440c31ee\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.9\"}};\n", + " var render_items = [{\"docid\":\"0cc949ce-e183-4264-8539-af129743c557\",\"elementid\":\"07778293-263f-47ec-8fb6-e74b7649a04d\",\"modelid\":\"8db7355b-8c31-4e0f-818c-0275440c31ee\"}];\n", + "\n", + " root.Bokeh.embed.embed_items(docs_json, render_items);\n", + " }\n", + "\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " clearInterval(timer);\n", + " }\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " console.log(\"Bokeh: ERROR: Unable to embed document because BokehJS library is missing\")\n", + " clearInterval(timer);\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "8db7355b-8c31-4e0f-818c-0275440c31ee" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "import random_points\n", + "circle_1=random_points.circle(radius=5., center=(5.,7.), points_nb=40, epsilon=1.5)\n", + "circle_2=random_points.circle(radius=5., center=(1.,1.), points_nb=30, epsilon=0.5)\n", + "\n", + "p = figure(plot_width=400, plot_height=400)\n", + "p.circle([point[0] for point in circle_1], [point[1] for point in circle_1], size=2, color=\"navy\", alpha=1.)\n", + "p.circle([point[0] for point in circle_2], [point[1] for point in circle_2], size=2, color=\"red\", alpha=1.)\n", + "show(p)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\ngfn/t+reDuVZOCEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import gudhi\n", + "import sqrt\n", + "alpha_1 = gudhi.AlphaComplex(points=circle_1)\n", + "stree_1 = alpha_1.create_simplex_tree()\n", + "diag_1 = sqrt.diagram(stree_1.persistence())\n", + "plt = gudhi.plot_persistence_diagram(diag_1)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nWgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "alpha_2 = gudhi.AlphaComplex(points=circle_2)\n", + "stree_2 = alpha_2.create_simplex_tree()\n", + "diag_2 = sqrt.diagram(stree_2.persistence())\n", + "plt = gudhi.plot_persistence_diagram(diag_2)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.20367561212545615" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gudhi.bottleneck_distance(sqrt.interval(stree_1.persistence_intervals_in_dimension(0)),\n", + " sqrt.interval(stree_2.persistence_intervals_in_dimension(0)))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5556276651924286" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gudhi.bottleneck_distance(sqrt.interval(stree_1.persistence_intervals_in_dimension(1)),\n", + " sqrt.interval(stree_2.persistence_intervals_in_dimension(1)))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5556276651924286" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Bottleneck distance\n", + "max(gudhi.bottleneck_distance(sqrt.interval(stree_1.persistence_intervals_in_dimension(0)),\n", + " sqrt.interval(stree_2.persistence_intervals_in_dimension(0))),\n", + " gudhi.bottleneck_distance(sqrt.interval(stree_1.persistence_intervals_in_dimension(1)),\n", + " sqrt.interval(stree_2.persistence_intervals_in_dimension(1)))\n", + " )" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/GUDHI_NIPS.pdf b/GUDHI_NIPS.pdf new file mode 100644 index 0000000..51b791e Binary files /dev/null and b/GUDHI_NIPS.pdf differ diff --git a/Rips_complex.ipynb b/Rips_complex.ipynb new file mode 100644 index 0000000..8bd9df6 --- /dev/null +++ b/Rips_complex.ipynb @@ -0,0 +1,110 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6629c443a4194c6bbf2b8c9282f99cf5", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "

Failed to display Jupyter Widget of type VBox.

\n", + "

\n", + " If you're reading this message in Jupyter Notebook or JupyterLab, it may mean\n", + " that the widgets JavaScript is still loading. If this message persists, it\n", + " likely means that the widgets JavaScript library is either not installed or\n", + " not enabled. See the Jupyter\n", + " Widgets Documentation for setup instructions.\n", + "

\n", + "

\n", + " If you're reading this message in another notebook frontend (for example, a static\n", + " rendering on GitHub or NBViewer),\n", + " it may mean that your frontend doesn't currently support widgets.\n", + "

\n" + ], + "text/plain": [ + "VBox(children=(Figure(camera_center=[0.0, 0.0, 0.0], height=500, matrix_projection=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], matrix_world=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], scatters=[Scatter(color_selected=array('white', \n", + " dtype='" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.patches as mpatches\n", + "\n", + "rips_complex = gudhi.RipsComplex(points=points, max_edge_length=0.4)\n", + "simplex_tree = rips_complex.create_simplex_tree(max_dimension=3)\n", + "diag = simplex_tree.persistence()\n", + "plt = gudhi.plot_persistence_diagram(diag, max_plots=100)\n", + "\n", + "# some legends\n", + "dim0 = mpatches.Patch(color='#ff0000', label='Dimension 0')\n", + "dim1 = mpatches.Patch(color='#00ff00', label='Dimension 1')\n", + "dim2 = mpatches.Patch(color='#0000ff', label='Dimension 2')\n", + "plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0., handles=[dim0, dim1, dim2])\n", + "\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cubical_function_persistence.ipynb b/cubical_function_persistence.ipynb new file mode 100644 index 0000000..202a316 --- /dev/null +++ b/cubical_function_persistence.ipynb @@ -0,0 +1,107 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.pyplot import figure, show\n", + "\n", + "from numpy import arange, sin, pi\n", + "\n", + "def my_sinusoid(t):\n", + " return 10 - 7*sin(t) - (3 * t)\n", + "\n", + "t = arange(0.0, 13.0, 13.0/75)\n", + "\n", + "fig = figure(1)\n", + "\n", + "signal = my_sinusoid(t)\n", + "\n", + "ax2 = fig.add_subplot(212)\n", + "ax2.plot(t, signal, '.')\n", + "ax2.grid(True)\n", + "ax2.set_ylim((-35, 10))\n", + "ax2.set_xlim((0, 13))\n", + "\n", + "points=[]\n", + "for i in range(0,len(t)):\n", + " points.append(my_sinusoid(t[i]))\n", + "\n", + "show()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[(0, (-30.281566498233445, inf)),\n", + " (0, (-21.213551105635062, -15.334789869008524)),\n", + " (0, (-2.351930856552615, 3.503101508895332))]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gudhi\n", + "\n", + "cc = gudhi.CubicalComplex(dimensions=[len(points)], top_dimensional_cells= points)\n", + "diag = cc.persistence()\n", + "plt = gudhi.plot_persistence_barcode(diag)\n", + "plt.show()\n", + "\n", + "diag" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}