{ "cells": [ { "cell_type": "markdown", "id": "fe2738b3", "metadata": {}, "source": [ "# ECC from pointcloud" ] }, { "cell_type": "code", "execution_count": 1, "id": "bc928164", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import random" ] }, { "cell_type": "code", "execution_count": 2, "id": "28337aea", "metadata": {}, "outputs": [], "source": [ "from pyEulerCurves import ECC_from_pointcloud, plot_euler_curve" ] }, { "cell_type": "markdown", "id": "957c827e", "metadata": {}, "source": [ "## Sample points from the unit circle" ] }, { "cell_type": "code", "execution_count": 3, "id": "d618c4dc", "metadata": {}, "outputs": [], "source": [ "point_cloud = []\n", "\n", "NUMBER_OF_POINTS = 100\n", "\n", "random.seed(42)\n", "for i in range(NUMBER_OF_POINTS):\n", " angle = random.uniform(0, 2 * np.pi)\n", " point_cloud.append([np.cos(angle), np.sin(angle)])\n", "\n", "point_cloud = np.array(point_cloud)" ] }, { "cell_type": "code", "execution_count": 4, "id": "ee92fbd9", "metadata": {}, "outputs": [ { "data": { "image/png": "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ebpFK187aGGP7IcgBgA2Vlro1X1fHm26/WOvHkyptHuCGADY3Pxpl+jCfuaSPKTUSrtPSBB78sknlZ+fr+zsbE2YMEE7d+4M23bbtm1yuVxdHu+9914iugoAtpOe5tLDXys03T6VCn9bHsReeOEFLViwQA8++KAqKio0depU3XDDDTp69GjE6w4cOKDa2tr2x6hRo6zuKgDY1owrhuqea/JNt0+Vwt+WB7FHH31U3/72t/Wd73xHl112mR5//HENGzZMq1atinjdkCFD5PF42h/p6elWdxUAbG3xjAItuM7cDX1u/yyLe2MPlgaxlpYWvf322yopKQl6vqSkRLt27Yp47bhx4+T1enXddddp69atYds1NzersbEx6AEAyer/XDdKnpzoAeoH//lOSiR4WBrE6urq1Nraqry8vKDn8/Ly5PP5Ql7j9Xr11FNPaf369dqwYYPGjBmj6667Tjt27AjZfvny5XK73e2PYcOGxf33SKSW836t3fmhfvpSldbu/FAt5/293SUANpKe5tLSr14ulyIfpPlxY2ocoGlpxY7jx4/roosu0q5du1RcXNz+/MMPP6xnn33WdLLGzJkz5XK59PLLL3f5XnNzs5qbm9u/bmxs1LBhwxxZsWP55mqt2VkTdFpzmkuaMzVfi2eY3ysCIPmVVdVq6ct/l6+xOWwblySPO1t/e2CaozZAx1Kxw9KRWG5urtLT07uMuk6cONFldBZJUVGRDh4MvYEvKytLOTk5QQ8nWr65Wr/dERzAJMlvSL/dUZOyddEAhFZa6NWv//cXI7YJHKCZzJmKlgaxzMxMTZgwQVu2bAl6fsuWLZo8ebLpf6eiokJer/PrgYXTct6vNTtrIrZZs7OGqUUAQer+GX4U1lEyZypaXjtx4cKFmjVrliZOnKji4mI99dRTOnr0qObOnStJWrx4sT766CP9x3/8hyTp8ccf14gRI3T55ZerpaVF69at0/r167V+/Xqru9prni0/3GUE1pnfaGv37akjE9MpALZn9gDNWA7SdRrLg9itt96q+vp6/exnP1Ntba0KCwu1efNmDR8+XJJUW1sbtGespaVF999/vz766CP17dtXl19+uTZt2qQZM2ZY3dVec+Tkmbi2A5AaAgdo+hrOKtR9cGBNbFL+oER3LWE4isUG1u78UA9t2h+13U9uvIyRGIAgZVW1mrduryQF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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.axis(\"scaled\")\n", "plt.xlim((-1.2, 1.2))\n", "plt.ylim((-1.2, 1.2))\n", "plt.scatter(point_cloud[:, 0], point_cloud[:, 1])\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "0a3b9077", "metadata": {}, "source": [ "## Full ECC" ] }, { "cell_type": "code", "execution_count": 5, "id": "49c79b52", "metadata": {}, "outputs": [], "source": [ "trans = ECC_from_pointcloud(\n", " epsilon=0.8, workers=2 # max filtration # number of CPU cores\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "id": "b0463126", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 19.4 ms, sys: 25.3 ms, total: 44.7 ms\n", "Wall time: 2.43 s\n" ] } ], "source": [ "%%time\n", "ecc = trans.fit_transform(point_cloud)" ] }, { "cell_type": "code", "execution_count": 7, "id": "bf5b487c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5838976 simplices found\n", "highest dimension is 21\n" ] } ], "source": [ "print(\"{} simplices found\".format(trans.num_simplices))\n", "print(\"highest dimension is {}\".format(max(trans.largest_dimension_list)))" ] }, { "cell_type": "code", "execution_count": 8, "id": "ed067c3d", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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xhtv9OjfBOBdJEIAPGrSpEmyWCzNHvPmzdNjjz3W6vssFotef/11l8Rw6NAhWSwW7dmzx+74U089pWXLlrnkbwDwD2HeDgBA8MnNzdXSpUvtjnXp0kWhoaHn9bn19fUKDw9v9/vj4+PP6+8D8D/cEQLgcZGRkbJarXaPa665xm5q7GxpaWmSpHHjxslisdiez5o1S3369NFLL72k7t27KzIyUoZhaN26dRo2bJg6duyoxMREXXfddTp48KDt89LT0yVJffv2lcVi0YgRIyQ1nxqrra3VQw89pKSkJEVFRWnYsGHavn277fV3331XFotFGzdu1BVXXKHo6GgNGTJEn332mcvOFQD3IhEC4POako+lS5equLjYLhn54osv9Le//U2vvvqqbaqrurpaDz/8sLZv366NGzcqJCRE48aNU2NjoyRp27ZtkqQNGzaouLhYr732Wot/d+rUqXr11Ve1fPly7dq1Sz179tTo0aN1/Phxu3EzZszQn//8Z+3YsUNhYWH61a9+5epTAMBNmBoD4HH/93//px/96Ee25z/96U/bHN+lSxdJUseOHWW1Wu1eq6ur01//+lfbGEm66aab7Ma8+OKLSkpKUmFhobKysmxjExMTm31ek+rqai1evFjLli2zxbdkyRIVFBToxRdf1COPPGIb+/jjj2v48OGSpGnTpmnMmDGqqalRVFRUm98LgPdxRwiAx1111VXas2eP7bFw4cJ2f1a3bt3skiBJOnjwoCZMmKDu3bsrLi7ONhV2+PBh05978OBB1dfXa+jQobZj4eHhys7O1v79++3GXn755bZ/p6SkSJJKS0ud/i4API87QgA8LiYmRj179nTZZ51r7Nix6tq1q5YsWaLU1FQ1NjYqKytLdXV1pj/XMAxJZ6rVzj1+7rGzF2g3vdY0DQfAt3FHCIBfCA8PV0NDg8NxZWVl2r9/v373u9/pmmuu0aWXXqry8nK7MREREZLU5uf17NlTERER+uCDD2zH6uvrtWPHDl166aXt/BYAfA13hAD4hbS0NG3cuFFDhw5VZGSkOnXq1OK4Tp06KTExUc8//7xSUlJ0+PBhTZs2zW5MUlKSOnTooHXr1unCCy9UVFRUs9L5mJgY3XvvvXrkkUeUkJCgiy66SPPmzdPJkyd11113ue17AvAs7ggB8At//vOfVVBQoK5du6pv376tjgsJCdHq1au1c+dOZWVlacqUKfrTn/5kNyYsLEwLFy7Uc889p9TUVN1www0tftYTTzyhm266Sbfddpv69eunL774Qm+//XarSRgA/2MxmibCAQAAggx3hAAAQNAiEQIAAEGLRAgAAAQtEiEAABC0SIQAAEDQIhECAABBi0QIAAAELRIhAAAQtEiEAABA0CIRAgAAQYtECAAABK3/DxOXHtB9Vth8AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# note how the EC is constant after epsilon=0.3\n", "fig, axs = plt.subplots(1)\n", "\n", "im0 = plot_euler_curve(ecc, axs, with_lines=True)" ] }, { "cell_type": "code", "execution_count": 9, "id": "2c896eac", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.2911514096055089, 0]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ecc[-1]" ] }, { "cell_type": "markdown", "id": "8aa98be2", "metadata": {}, "source": [ "## ECC with max_dimension = 2" ] }, { "cell_type": "code", "execution_count": 10, "id": "58ee1683", "metadata": {}, "outputs": [], "source": [ "trans = ECC_from_pointcloud(\n", " epsilon=0.8, # max filtration\n", " max_dimension=2, # max dimesion of the simplices\n", " workers=2, # number of CPU cores\n", ")" ] }, { "cell_type": "code", "execution_count": 11, "id": "6b7fa4c8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 13.1 ms, sys: 18.5 ms, total: 31.6 ms\n", "Wall time: 1.22 s\n" ] } ], "source": [ "%%time\n", "ecc = trans.fit_transform(point_cloud)" ] }, { "cell_type": "code", "execution_count": 12, "id": "c9d9e593", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9365 simplices found\n", "highest dimension is 2\n" ] } ], "source": [ "print(\"{} simplices found\".format(trans.num_simplices))\n", "print(\"highest dimension is {}\".format(max(trans.largest_dimension_list)))" ] }, { "cell_type": "code", "execution_count": 13, "id": "68c4e707", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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harFEfs9PHz4sDB48GDBzc1NaNeunfDyyy8LV65csXDVhhM7voqKCsHNzU1YtmyZhSs1ntgxLl68WAgLCxPc3NwEf39/4amnnhLOnDljltpkgmCOeSciIiKi5oNriIiIiMjuMRARERGR3WMgIiIiIrvHQERERER2j4GIiIiI7B4DEREREdk9BiIiIiKyewxEREREZPcYiIio2Rg4cCBSU1N1X7dv3x6LFi2yaA1jxoxpFk8VJyJxGIiIyOaMGTMGMpms0Wv+/Pl46623btpPJpPh22+/laSGkydPQiaTIT8/X+/4Bx98gFWrVknyGURkO5ysXQARUVPi4uKwcuVKvWNt27bVPe3aWHV1dXB2dja6v0KhMOnzicg2cYaIiGySXC6HUqnUe8XGxupdMrte+/btAQAPPfQQZDKZ7us5c+agR48e+PTTT9GhQwfI5XIIgoCsrCz07dsXrVq1go+PD+Lj43H8+HHd+YKDgwEAPXv2hEwmw8CBAwE0vmRWW1uLlJQU+Pr6wtXVFX379sWePXt07//222+QyWTYvHkzevfuDXd3d8TExODo0aOS/VkRkekYiIioRWgIIStXrkRxcbFeKPnzzz/x5Zdf4n//+5/uEtjly5fx8ssvY8+ePdi8eTMcHBzw0EMPQavVAgB2794NANi0aROKi4vxzTffNPm506dPx//+9z989tln2LdvHzp27Ihhw4bh0qVLeu1mzZqF999/H3v37oWTkxOeffZZqf8IiMgEvGRGRDZpw4YNuOOOO3RfDx8+/Jbt27ZtCwBo1aoVlEql3ntqtRqrV6/WtQGARx55RK/NihUr4Ovri8LCQoSHh+va+vj4NDpfg8uXL+Pjjz/GqlWrdPUtX74c2dnZWLFiBV555RVd23feeQcDBgwAAMyYMQMjR47E1atX4erqestxEZFlcIaIiGzS/fffj/z8fN1r8eLFRp8rKChILwwBwPHjx5GYmIgOHTrAy8tLd4ns1KlTBp/3+PHjqKurQ58+fXTHnJ2dcd999+Hw4cN6bbt166b7b39/fwBAaWmp6LEQkXlwhoiIbJKHhwc6duwo2blu9MADDyAwMBDLly9HQEAAtFotwsPDoVarDT6vIAgArt3dduPxG49dv5C74b2Gy3NEZH2cISKiFsPZ2Rkajea27S5evIjDhw/jtddeQ2xsLDp37ozy8nK9Ni4uLgBwy/N17NgRLi4uyMnJ0R2rq6vD3r170blzZyNHQUTWwBkiImox2rdvj82bN6NPnz6Qy+Vo3bp1k+1at24NHx8fLFu2DP7+/jh16hRmzJih18bX1xdubm7IyspCu3bt4Orq2uiWew8PDzz//PN45ZVX4O3tjbvuugvz58/HlStXkJycbLZxEpH0OENERC3G+++/j+zsbAQGBqJnz543befg4ICMjAzk5eUhPDwcL730Et577z29Nk5OTli8eDGWLl2KgIAA/OMf/2jyXO+++y4eeeQRJCUloVevXvjzzz/x888/3zSMEZFtkgkNF8GJiIiI7BRniIiIiMjuMRARERGR3WMgIiIiIrvHQERERER2j4GIiIiI7B4DEREREdk9BiIiIiKyewxEREREZPcYiIiIiMjuMRARERGR3WMgIiIiIrv3f/7flDFio/PoAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(1)\n", "\n", "im0 = plot_euler_curve(ecc, axs, with_lines=False)" ] }, { "cell_type": "code", "execution_count": null, "id": "3edca128", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "tda", "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.13.3" } }, "nbformat": 4, "nbformat_minor": 5 }