Skip to content

Instantly share code, notes, and snippets.

@xgao32
Created September 22, 2021 21:08
Show Gist options
  • Save xgao32/33f0be139dc0d179faa39f8bfd6a0533 to your computer and use it in GitHub Desktop.
Save xgao32/33f0be139dc0d179faa39f8bfd6a0533 to your computer and use it in GitHub Desktop.
Ripser crash demo.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 5,
"metadata": {
"colab": {
"name": "Ripser crash demo.ipynb",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"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.7.3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/xgao32/33f0be139dc0d179faa39f8bfd6a0533/ripser-crash-demo.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "6d395ed4-b37b-4e19-8834-a05fd9b028e5",
"tags": [],
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "409ba39d-e125-44de-c89e-2c37d139f4dd"
},
"source": [
"import pandas as pd\n",
"import seaborn as sns\n",
"import numpy as np\n",
"from scipy import stats\n",
"from scipy import sparse\n",
"from numpy import array\n",
"import time\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from ripser import ripser\n",
"from persim import plot_diagrams\n",
"import kmapper as km\n",
"\n",
"np.random.seed(1)\n",
"\n",
"\n",
"%config Completer.use_jedi = False\n",
"# gdrive = False"
],
"id": "6d395ed4-b37b-4e19-8834-a05fd9b028e5",
"execution_count": 28,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:18: UserWarning: Config option `use_jedi` not recognized by `IPCompleter`.\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "g-_QpXS5D8Z-",
"outputId": "c3367b5a-feab-4e91-93f2-26b68670cab0"
},
"source": [
"# amount of free RAM\n",
"!free -h "
],
"id": "g-_QpXS5D8Z-",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" total used free shared buff/cache available\n",
"Mem: 12G 520M 9.7G 1.1M 2.4G 11G\n",
"Swap: 0B 0B 0B\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3ad24e35-be42-4c00-9d61-b52f0e2620f9",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "24523bdf-9bad-4884-ebca-1c851e2f8bd2"
},
"source": [
"df = pd.read_csv(\"/content/drive/MyDrive/summer21/GB1/result/seq_fit_all.csv\", index_col=False)\n",
"df.head() , df.shape # 1.7 million pairs out of 149361^2 / 2 ~= 1E10 possible pairs"
],
"id": "3ad24e35-be42-4c00-9d61-b52f0e2620f9",
"execution_count": 31,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"( I J V\n",
" 0 1 1 0.000000\n",
" 1 2 1 0.938090\n",
" 2 4 1 0.993528\n",
" 3 5 1 0.967281\n",
" 4 6 1 0.622899, (1669662, 3))"
]
},
"metadata": {},
"execution_count": 31
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "XdFjuNyGCjTC",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 329
},
"outputId": "c2b0ff85-cd7b-4cf9-861c-ec9b2556671d"
},
"source": [
"nn = 1000\n",
"df_HD3 = df[(df[\"I\"] <= nn) & (df[\"J\"] <=nn)]\n",
"\n",
"# sparse distance matrix\n",
"df_HD3_ = np.asarray(df_HD3)\n",
"\n",
"# convert n by 3 array to sparse matrix\n",
"df_HD3_dm = sparse.csr_matrix((df_HD3_[:, 2], (df_HD3_[:, 0].astype(int), df_HD3_[:, 1].astype(int))))\n",
"\n",
"# convert n by 3 array to sparse matrix\n",
"%time diagrams = ripser(df_HD3_dm, maxdim = 3, distance_matrix=True)['dgms']\n",
"plot_diagrams(diagrams, title = \"# vertices = \" + str(nn) + \" # edges = \" + str(len(df_HD3)) ,show=True)"
],
"id": "XdFjuNyGCjTC",
"execution_count": 33,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"CPU times: user 4.74 ms, sys: 0 ns, total: 4.74 ms\n",
"Wall time: 4.75 ms\n"
]
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 506
},
"id": "gwcu9oiADqco",
"outputId": "d7eae9de-0072-489e-8b45-7e43e9ba774b"
},
"source": [
"nn = 30000\n",
"df_HD3 = df[(df[\"I\"] <= nn) & (df[\"J\"] <=nn)]\n",
"\n",
"# sparse distance matrix\n",
"df_HD3_ = np.asarray(df_HD3)\n",
"\n",
"# convert n by 3 array to sparse matrix\n",
"df_HD3_dm = sparse.csr_matrix((df_HD3_[:, 2], (df_HD3_[:, 0].astype(int), df_HD3_[:, 1].astype(int))))\n",
"\n",
"\n",
"# convert n by 3 array to sparse matrix\n",
"%time diagrams = ripser(df_HD3_dm, maxdim = 2, distance_matrix=True)['dgms']\n",
"plot_diagrams(diagrams, title = \"# vertices = \" + str(nn) + \" # edges = \" + str(len(df_HD3)) ,show=True) "
],
"id": "gwcu9oiADqco",
"execution_count": 34,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"CPU times: user 326 ms, sys: 1.54 ms, total: 328 ms\n",
"Wall time: 328 ms\n"
]
},
{
"output_type": "display_data",
"data": {
"image/png": "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//79FidYWPqeN5UQ8PLLLysbGxuVlJRU6M9oyXvLksCulPZ7s7GxUWPHji3wfjfl2rVrys7OTo0bN85snR07dignJyfVs2fPQr+k5H898rv//vuVTqcr8pqsJ598UtnY2Ki//vrL5P0tWrRQQUFBFv1c5UmGAS20e/duunTpAmjXJB06dIjXX3+9ROcaOXIkb731Fk5OTkyePLlA6ujMmTPZtm0bHTt25LHHHqNp06bEx8dz8OBBtm7dSnx8fJHP0apVK2xtbfnPf/5DYmIijo6O9OrVi1q1ahWo+8gjj7BkyRJefPFF/vrrL+69915SUlLYunUrU6ZMYciQIXTv3p0nnniCGTNmcPjwYfr06YO9vT0nTpxg5cqVfPrppwwfPpzFixczd+5cHnjgAerXr8/NmzdZsGABHh4eDBgwoNA2N23alKZNmxbvxTSjefPmhIWF0apVK7y9vTlx4gTffPMNWVlZzJw506juRx99xODBg+nTpw+jRo0iKiqKOXPm8Oijjxql+w8fPpxOnToxceJEoqOjDatN5OTkFBiCKotzmnPhwgViYmIM788//viDmjVr0qhRI4tfLxsbG77++mv69+9Ps2bNmDhxInXq1OHixYts27YNDw8P1q9fD2hDX5s3b+bee+9lypQpZGdnG659ioyMNJyzbdu2PPjgg8yePZvr168bUtePHz8OYHTtj6Xv+T59+lC7dm26du2Kn58fR48eZc6cOQwcOBB3d/dCf0ZLE6GK8tdff/HII49Qs2ZNwsLCCgyNd+nShdDQUKOyFStWkJ2dbXYI8Ny5cwwePBidTsfw4cNZuXKl0f0tWrQwDIW+//777N69m379+hEUFER8fDyrV69m3759PPPMM9x1112Gx82cOZOoqCg6duyInZ0da9euZcuWLbz33nsmE1SioqKIjIxk6tSpFW+dR2tHy8ogOztbubm5qe+++04ppaWyA2a/4RTlxIkThiEHc5PDV69eVU8//bQKDAxU9vb2qnbt2iosLEx99dVXhjqF9ayUUmrBggUqNDTU8I03d0jw9p6VUlqK8htvvKHq1atneL7hw4erU6dOGdX76quvVNu2bZWzs7Nyd3dXzZs3V6+88orh2+jBgwfV6NGjVVBQkHJ0dFS1atVSgwYNsniYtLRMnz5dtWvXTnl7eys7OzsVEBCgRo0apSIjI03W//HH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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "IQDusi6LESgF"
},
"source": [
"nn = 50000\n",
"df_HD3 = df[(df[\"I\"] <= nn) & (df[\"J\"] <=nn)]\n",
"\n",
"# sparse distance matrix\n",
"df_HD3_ = np.asarray(df_HD3)\n",
"\n",
"# convert n by 3 array to sparse matrix\n",
"df_HD3_dm = sparse.csr_matrix((df_HD3_[:, 2], (df_HD3_[:, 0].astype(int), df_HD3_[:, 1].astype(int))))\n",
"\n",
"print(len(df_HD3))\n",
"# convert n by 3 array to sparse matrix\n",
"%time diagrams = ripser(df_HD3_dm, maxdim = 2, distance_matrix=True)['dgms']\n",
"plot_diagrams(diagrams, title = \"# vertices = \" + str(nn) + \" # edges = \" + str(len(df_HD3)) ,show=True)"
],
"id": "IQDusi6LESgF",
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment