Skip to content

Instantly share code, notes, and snippets.

@bilzard
Last active November 16, 2022 06:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bilzard/08eb013b7a65e35e7bc8f0768c4bd147 to your computer and use it in GitHub Desktop.
Save bilzard/08eb013b7a65e35e7bc8f0768c4bd147 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "11b09a51-424e-4315-8a7e-872cc7a93209",
"metadata": {},
"outputs": [],
"source": [
"%load_ext lab_black\n",
"\n",
"from itertools import product\n",
"from functools import wraps\n",
"from time import time\n",
"from collections import Counter, defaultdict\n",
"\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from tqdm import tqdm\n",
"\n",
"\n",
"tqdm.pandas()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "577ee90e-cf92-4278-aaa4-cdcf9269a231",
"metadata": {},
"outputs": [],
"source": [
"global_result = defaultdict(list)\n",
"\n",
"\n",
"def timing(f):\n",
" @wraps(f)\n",
" def wrap(*args, **kw):\n",
" ts = time()\n",
" result = f(*args, **kw)\n",
" te = time()\n",
" global_result[(f.__name__, args[0])].append(te - ts)\n",
" print(f\"func:{f.__name__} args:[{args}, {kw}] took: {te - ts:2.4f} sec\")\n",
" return result\n",
"\n",
" return wrap"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "6707cbb8-42d4-4530-aeee-d1ef67fc7153",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"func:collection_counter args:[(1000,), {}] took: 0.0312 sec\n",
"func:series_value_count args:[(1000,), {}] took: 0.0957 sec\n",
"func:collection_counter args:[(2000,), {}] took: 0.0452 sec\n",
"func:series_value_count args:[(2000,), {}] took: 0.1947 sec\n",
"func:collection_counter args:[(5000,), {}] took: 0.1129 sec\n",
"func:series_value_count args:[(5000,), {}] took: 0.4921 sec\n",
"func:collection_counter args:[(10000,), {}] took: 0.2299 sec\n",
"func:series_value_count args:[(10000,), {}] took: 0.9769 sec\n",
"func:collection_counter args:[(1000,), {}] took: 0.0227 sec\n",
"func:series_value_count args:[(1000,), {}] took: 0.0959 sec\n",
"func:collection_counter args:[(2000,), {}] took: 0.0445 sec\n",
"func:series_value_count args:[(2000,), {}] took: 0.1961 sec\n",
"func:collection_counter args:[(5000,), {}] took: 0.1131 sec\n",
"func:series_value_count args:[(5000,), {}] took: 0.4870 sec\n",
"func:collection_counter args:[(10000,), {}] took: 0.2290 sec\n",
"func:series_value_count args:[(10000,), {}] took: 0.9691 sec\n",
"func:collection_counter args:[(1000,), {}] took: 0.0228 sec\n",
"func:series_value_count args:[(1000,), {}] took: 0.0958 sec\n",
"func:collection_counter args:[(2000,), {}] took: 0.0447 sec\n",
"func:series_value_count args:[(2000,), {}] took: 0.1948 sec\n",
"func:collection_counter args:[(5000,), {}] took: 0.1135 sec\n",
"func:series_value_count args:[(5000,), {}] took: 0.4958 sec\n",
"func:collection_counter args:[(10000,), {}] took: 0.2287 sec\n",
"func:series_value_count args:[(10000,), {}] took: 0.9865 sec\n",
"func:collection_counter args:[(1000,), {}] took: 0.0228 sec\n",
"func:series_value_count args:[(1000,), {}] took: 0.0971 sec\n",
"func:collection_counter args:[(2000,), {}] took: 0.0446 sec\n",
"func:series_value_count args:[(2000,), {}] took: 0.1966 sec\n",
"func:collection_counter args:[(5000,), {}] took: 0.1131 sec\n",
"func:series_value_count args:[(5000,), {}] took: 0.4936 sec\n",
"func:collection_counter args:[(10000,), {}] took: 0.2295 sec\n",
"func:series_value_count args:[(10000,), {}] took: 0.9863 sec\n",
"func:collection_counter args:[(1000,), {}] took: 0.0228 sec\n",
"func:series_value_count args:[(1000,), {}] took: 0.0965 sec\n",
"func:collection_counter args:[(2000,), {}] took: 0.0448 sec\n",
"func:series_value_count args:[(2000,), {}] took: 0.1969 sec\n",
"func:collection_counter args:[(5000,), {}] took: 0.1129 sec\n",
"func:series_value_count args:[(5000,), {}] took: 0.4931 sec\n",
"func:collection_counter args:[(10000,), {}] took: 0.2314 sec\n",
"func:series_value_count args:[(10000,), {}] took: 0.9752 sec\n"
]
}
],
"source": [
"@timing\n",
"def collection_counter(n, sort=False):\n",
" def agg_top20(x):\n",
" counter = Counter(x)\n",
" top20 = dict(counter.most_common(20)).keys()\n",
" return \" \".join(map(str, top20))\n",
"\n",
" df = pd.DataFrame(\n",
" pd.DataFrame(np.random.randint(0, 1000, (n, 100))).stack().reset_index()\n",
" )\n",
" return df.groupby(\"level_0\")[0].agg(agg_top20)\n",
"\n",
"\n",
"@timing\n",
"def series_value_count(n, sort=False):\n",
" def agg_top20(x):\n",
" counter = x.value_counts()\n",
" top20 = counter.iloc[:20].index\n",
" return \" \".join(map(str, top20))\n",
"\n",
" df = pd.DataFrame(\n",
" pd.DataFrame(np.random.randint(0, 1000, (n, 100))).stack().reset_index()\n",
" )\n",
" return df.groupby(\"level_0\")[0].agg(agg_top20)\n",
"\n",
"\n",
"for _ in range(5):\n",
" for n in [1000, 2_000, 5_000, 10_000]:\n",
" collection_counter(n)\n",
" series_value_count(n)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "7a044ef4-f8d3-4667-b056-3d2a2f23e85e",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHLCAYAAAAk8PeNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAABxrUlEQVR4nO3dd3gU9drG8e9m00MKJZSQAgm999C7ggUVCwgoYEFpNuyv54hY8NgBCdjBAopiPXosiDQBAelNSkgIPdRUSNmd948hizEBQkgyKffnurh0n9nsPpss7J2ZX7EZhmEgIiIiUgG5Wd2AiIiIiFUUhERERKTCUhASERGRCktBSERERCosBSERERGpsBSEREREpMJSEBIREZEKS0FIREREKiwFIREREamwFISkwhs5ciR16tSxuo0yZ/bs2dhsNuLj461uRQqgTp06jBw50uo2REodBSEpl2w2W4H+LF682OpW89i2bRvPPPOMAkYZN3nyZL755psC3Tc+Pt71nvzyyy/zHH/mmWew2WwcO3bsgo+zYsUKnnnmGU6dOlWIjkUqJnerGxApDh9//HGu2x999BELFizIU2/cuDHvvvsuTqezJNu7oG3btjFp0iR69uypM1Vl2OTJk7n55pu54YYbLunrnn32WW688UZsNtslP+eKFSuYNGkSI0eOJCgoKNexHTt24Oam331F/klBSMql2267LdftP/74gwULFuSpi5QmrVq1YsOGDXz99dfceOONRfrYXl5eRfp4JSEtLQ0/P788dafTSWZmJt7e3hZ0JeWNfj2QCu+fY4RyLlO8+uqrxMTEEBkZia+vL1deeSX79u3DMAyee+45QkND8fHx4frrr+fEiRN5HvfHH3+kW7du+Pn54e/vzzXXXMPWrVsv2Mvs2bO55ZZbAOjVq1e+l/BmzJhB06ZN8fLyIiQkhHHjxl30Usj8+fOx2WwsWbIkz7G3334bm83Gli1bANi0aRMjR44kMjISb29vatasyZ133snx48cv+BxgXpJ85pln8tTzG59y6tQpHnzwQcLCwvDy8qJevXq89NJLBT47d+bMGZ555hkaNGiAt7c3tWrV4sYbbyQ2NtZ1n7S0NB5++GHXczRs2JBXX30VwzBc98n5ec+ePfuiryfnEtXu3btdZ10CAwO54447SE9Pz/V1aWlpfPjhh66fYUHG59x66600aNCAZ599NlePBfHMM8/w6KOPAlC3bl3X8+ZcYv3nzyBnjNfy5cuZMGECwcHB+Pn5MXDgQI4ePeq634gRI6hWrRpZWVl5nvPKK6+kYcOGF+xr2bJl3HLLLYSHh+Pl5UVYWBgPPfQQp0+fznW/kSNHUqlSJWJjY7n66qvx9/dn2LBhgPn9HD9+PHPmzHG993/66ScAXn31VTp37kzVqlXx8fGhbdu2zJ8/P9dj9+jRg5YtW+bbX8OGDenXr5/r9meffUbbtm3x9/cnICCA5s2bM3Xq1Au+RinbdEZI5DzmzJlDZmYm9913HydOnODll19m0KBB9O7dm8WLF/P444+ze/du3nzzTR555BE++OAD19d+/PHHjBgxgn79+vHSSy+Rnp7OzJkz6dq1K+vXrz/vJa/u3btz//33M23aNP7v//6Pxo0bA7j++8wzzzBp0iT69u3LmDFj2LFjBzNnzmTNmjUsX74cDw+PfB/3mmuuoVKlSnz++ef06NEj17F58+bRtGlTmjVrBsCCBQvYs2cPd9xxBzVr1mTr1q288847bN26lT/++KNQl2z+KT09nR49enDgwAHuvfdewsPDWbFiBU8++SSHDh1iypQpF/x6h8PBtddey8KFC7n11lt54IEHSElJYcGCBWzZsoWoqCgMw+C6665j0aJF3HXXXbRq1Yqff/6ZRx99lAMHDvDGG28Uuv9BgwZRt25dXnzxRdatW8d7771H9erVeemllwDz53/33XfToUMH7rnnHgCioqIu+rh2u51//etfDB8+/JLPCt14443s3LmTTz/9lDfeeINq1aoBEBwcfMGvu++++6hcuTITJ04kPj6eKVOmMH78eObNmwfA7bffzkcffcTPP//Mtdde6/q6w4cP89tvvzFx4sQLPv4XX3xBeno6Y8aMoWrVqqxevZo333yT/fv388UXX+S6b3Z2Nv369aNr1668+uqr+Pr6uo799ttvfP7554wfP55q1aq5/g5NnTqV6667jmHDhpGZmclnn33GLbfcwvfff88111zjeg2jRo1iy5Ytrvc5wJo1a9i5cyf/+te/APO9P2TIEPr06eP6WW7fvp3ly5fzwAMPXPB1ShlmiFQA48aNM873dh8xYoQRERHhuh0XF2cARnBwsHHq1ClX/cknnzQAo2XLlkZWVparPmTIEMPT09M4c+aMYRiGkZKSYgQFBRmjRo3K9TyHDx82AgMD89T/6YsvvjAAY9GiRbnqiYmJhqenp3HllVcaDofDVZ8+fboBGB988MEFH3fIkCFG9erVjezsbFft0KFDhpubm/Hss8+6aunp6Xm+9tNPPzUAY+nSpa7arFmzDMCIi4tz1QBj4sSJeb4+IiLCGDFihOv2c889Z/j5+Rk7d+7Mdb8nnnjCsNvtRkJCwgVfywcffGAAxuuvv57nmNPpNAzDML755hsDMJ5//vlcx2+++WbDZrMZu3fvNgzj3M971qxZeR7rn69n4sSJBmDceeedue43cOBAo2rVqrlqfn5+uV7zheT08MorrxjZ2dlG/fr1jZYtW7peS87zHj169IKP88orr+T5meT4588g5+fXt29f1/MYhmE89NBDht1ud733HQ6HERoaagwePDjX473++uuGzWYz9uzZc8Ge8ns/vfjii4bNZjP27t3rqo0YMcIAjCeeeCLP/QHDzc3N2Lp160UfPzMz02jWrJnRu3dvV+3UqVOGt7e38fjjj+e67/3332/4+fkZqamphmEYxgMPPGAEBATk+jsi5Z8ujYmcxy233EJgYKDrdnR0NGCOP3J3d89Vz8zM5MCBA4D5W+WpU6cYMmQIx44dc/2x2+1ER0ezaNGiQvXz66+/kpmZyYMPPphr0OuoUaMICAjghx9+uODXDx48mMTExFyX2ebPn4/T6WTw4MGumo+Pj+v/z5w5w7Fjx+jYsSMA69atK1Tv//TFF1/QrVs3KleunOt71LdvXxwOB0uXLr3g13/55ZdUq1aN++67L8+xnDNW//vf/7Db7dx///25jj/88MMYhsGPP/5Y6P5Hjx6d63a3bt04fvw4ycnJhX7MHDlnhTZu3FjgWWeX45577sl1lq9bt244HA727t0LgJubG8OGDeO7774jJSXFdb85c+bQuXNn6tate8HH//v7KS0tjWPHjtG5c2cMw2D9+vV57j9mzJh8H6dHjx40adLkgo9/8uRJkpKS6NatW673amBgINdffz2ffvqp65Kjw+Fg3rx53HDDDa5xSEFBQaSlpbFgwYILviYpXxSERM4jPDw81+2cUBQWFpZv/eTJkwDs2rULgN69exMcHJzrzy+//EJiYmKh+sn5YPrnmAxPT08iIyNdx8+nf//+BAYGui55gHlZrFWrVjRo0MBVO3HiBA888AA1atTAx8eH4OBg14ddUlJSoXr/p127dvHTTz/l+f707dsXwPU9Onr0KIcPH3b9SU1NBSA2NpaGDRvmCqT/tHfvXkJCQvD3989Vz7nMeLHv14X8871RuXJl4Nx74HINGzaMevXqFWqs0KUqyGsZPnw4p0+f5uuvvwbMGWhr167l9ttvv+jjJyQkMHLkSKpUqUKlSpUIDg52XZ795/vJ3d2d0NDQfB/nfIHr+++/p2PHjnh7e1OlShWCg4OZOXNmnscePnw4CQkJLFu2DDB/sThy5Eiu1zB27FgaNGjAVVddRWhoKHfeeadrLJKUXxojJHIedrv9kuo5H1g5g30//vhjatasmed+F/rwLk5eXl7ccMMNfP3118yYMYMjR46wfPlyJk+enOt+gwYNYsWKFTz66KO0atWKSpUq4XQ66d+/f6GXGXA4HLluO51OrrjiCh577LF8758TzNq3b58rsEycODHfwdiX43xjnv7Z899d7D1wuXLOCo0cOZJvv/22SB7zQs+Vn7+/liZNmtC2bVs++eQThg8fzieffIKnpyeDBg264GM7HA6uuOIKTpw4weOPP06jRo3w8/PjwIEDjBw5Ms/7ycvL67xT/P9+5ifHsmXLuO666+jevTszZsygVq1aeHh4MGvWLObOnZvrvv369aNGjRp88skndO/enU8++YSaNWu6wjdA9erV2bBhAz///DM//vgjP/74I7NmzWL48OF8+OGHF3ytUnYpCIkUsZxBsdWrV8/1j2xBne+DOSIiAjB/G4+MjHTVMzMziYuLK9BzDR48mA8//JCFCxeyfft2DMPIdVns5MmTLFy4kEmTJvH000+76jlnuS6mcuXKeWawZWZmcujQoVy1qKgoUlNTL9rznDlzcs0uynndUVFRrFq1iqysrPMOEI+IiODXX38lJSUl11mhv/76y3U8p2cgT9+Xc8YIzv9zLKjbbruN559/nkmTJnHdddeVyHNeyPDhw5kwYQKHDh1i7ty5XHPNNa7v3fls3ryZnTt38uGHHzJ8+HBXvaguPX355Zd4e3vz888/51oeYNasWXnua7fbGTp0KLNnz+all17im2++YdSoUXmCoKenJwMGDGDAgAE4nU7Gjh3L22+/zb///W/q1atXJH1L6aJLYyJFrF+/fgQEBDB58uR8pxz/fWpyfnLGK/zzg7lv3754enoybdq0XL+tv//++yQlJblmyFxI3759qVKlCvPmzWPevHl06NAh1yWHnA+Ff57ZuNgsrhxRUVF5xve88847ec6uDBo0iJUrV/Lzzz/neYxTp06RnZ0NQJcuXejbt6/rT04Quummmzh27BjTp0/P8/U5vV999dU4HI4893njjTew2WxcddVVAAQEBFCtWrU8fc+YMaNAr/l8/Pz8LmuF55yzQhs2bOC7774r8HNC3vdOURgyZAg2m40HHniAPXv2FGhNrvzeT4ZhFNl0dLvdjs1my/X+io+PP+/Yqttvv52TJ09y7733kpqamuc1/HOJCDc3N1q0aAFARkZGkfQspY/OCIkUsYCAAGbOnMntt99OmzZtuPXWWwkODiYhIYEffviBLl265PsBnqNVq1bY7XZeeuklkpKS8PLyonfv3lSvXp0nn3ySSZMm0b9/f6677jp27NjBjBkzaN++fYE+mDw8PLjxxhv57LPPSEtL49VXX83Te/fu3Xn55ZfJysqidu3a/PLLL8TFxRXotd99992MHj2am266iSuuuIKNGzfy888/u6Zy53j00Uf57rvvuPbaaxk5ciRt27YlLS2NzZs3M3/+fOLj4/N8zd8NHz6cjz76iAkTJrB69Wq6detGWloav/76K2PHjuX6669nwIAB9OrVi6eeeor4+HhatmzJL7/8wrfffsuDDz6Yazr73XffzX/+8x/uvvtu2rVrx9KlS9m5c2eBXvP5tG3bll9//ZXXX3+dkJAQ6tat6xpwX1DDhg3jueeeY8OGDQV+ToCnnnqKW2+9FQ8PDwYMGJDvooSXKjg4mP79+/PFF18QFBRUoODdqFEjoqKieOSRRzhw4AABAQF8+eWXRTaW6pprruH111+nf//+DB06lMTERGJiYqhXrx6bNm3Kc//WrVvTrFkzvvjiCxo3bkybNm1yHb/77rs5ceIEvXv3JjQ0lL179/Lmm2/SqlUr19gyKYcsmasmUsIKM33+lVdeyXW/RYsWGYDxxRdf5KrnTENes2ZNnvv369fPCAwMNLy9vY2oqChj5MiRxp9//nnRft99910jMjLSsNvteabST58+3WjUqJHh4eFh1KhRwxgzZoxx8uTJiz5mjgULFhiAYbPZjH379uU5vn//fmPgwIFGUFCQERgYaNxyyy3GwYMH80wlz2/6vMPhMB5//HGjWrVqhq+vr9GvXz9j9+7deaZuG4a5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6sXJkyfLVGgVkQJyOsyp78unwoE/zxZt0HiAOQU+VBsy50dB6DxKZIsNNzssesH8/7+HoSUvm/VeTxXP8xaxrKwsfHx8tBChiIgVss7Axk/NS2AnYs2a3cs869P5PqgaZW1/pZwujRUlw4DMtIL/6TQOuj9qhp7fnjdrvz1v3u7+qHm8oI91iXvnzp8/n+bNm+Pj40PVqlXp27cvaWlpALz33ns0btwYb29vGjVqxIwZM1xfFx8fj81mY968efTo0QNvb2/mzJmT76Wxb7/9ljZt2uDt7U1kZCSTJk0iOzv77LfK4JlnniE8PBwvLy9CQkK4//77L9r3//3f/xEdHZ2n3rJlS5599lkA1qxZwxVXXEG1atUIDAykR48erFu37ryPuXjxYmw2G6dOnXLVNmzYgM1mIz4+3lX7/fff6datGz4+PoSFhXH//fe7vmcXk5GRweOPP05YWBheXl7Uq1eP999/33V8yZIldOjQAS8vL2rVqsUTTzzh+l4B1KlThylTpuR6zFatWvHMM8+4bttsNt577z0GDhyIr68v9evX57vvvgPMn1uvXr0AqFy5MjabjZEjRxaodxEppdJPwNJXYEoz+P5BMwR5B5mfHw9tgQFTFIIKQGeEilJWOkwOKdzXLn3F/HO+2xfzfwfB069Adz106BBDhgzh5ZdfZuDAgaSkpLBs2TIMw2DOnDk8/fTTTJ8+ndatW7N+/XpGjRqFn58fI0aMcD3GE088wWuvvUbr1q3x9vbm559/zvUcy5YtY/jw4UybNo1u3boRGxvLPffcA8DEiRP58ssveeONN/jss89o2rQphw8fZuPGjRftfdiwYbz44ovExsYSFWX+Bd+6dSubNm3iyy+/BCAlJYURI0bw5ptvYhgGr732GldffTW7du3C39+/QN+jf4qNjaV///48//zzfPDBBxw9epTx48czfvx4Zs2addGvHz58OCtXrmTatGm0bNmSuLg4jh07BsCBAwe4+uqrGTlyJB999BF//fUXo0aNwtvbO1fQKYhJkybx8ssv88orr/Dmm28ybNgw9u7dS1hYGF9++SU33XQTO3bsICAgQGfwRMqqU/vMGWBrP4Sss7+MBYaZvzy3vh28KlnbXxmjIFQBHTp0iOzsbG688UYiIiIAaN68OWCGlNdee40bb7wRgLp167Jt2zbefvvtXEHowQcfdN0nP5MmTeKJJ55wfU1kZCTPPfccjz32GBMnTiQhIYGaNWvSt29fPDw8CA8Pp0OHDhftvWnTprRs2ZK5c+fy73//G4A5c+YQHR1NvXr1AOjdu3eur3nnnXcICgpiyZIlXHvttQX9NuXy4osvMmzYMB588EEA6tevz7Rp0+jRowczZ87E29v7vF+7c+dOPv/8cxYsWEDfvn0B8/uRY8aMGYSFhTF9+nRsNhuNGjXi4MGDPP744zz99NO4XcKy9iNHjmTIkCGAubHstGnTWL16Nf3793dtKVK9enWNERIpiw5vMRdA3DwfjLPjV2s0M8f/NB0Idg9r+yujFISKkoeveWbmUv3+hnn2x+5pbnDX/VHo+tClP3cBtWzZkj59+tC8eXP69evHlVdeyc0334ynpyexsbHcddddjBo1ynX/7OzsPOOk2rW78KC7jRs3snz5cl544QVXzeFwcObMGdLT07nllluYMmUKkZGR9O/fn6uvvpoBAwbg7n7xt+SwYcP44IMP+Pe//41hGHz66adMmDDBdfzIkSP861//YvHixSQmJuJwOEhPTychIaGg36J8X8+mTZuYM2eOq2YYBk6nk7i4OBo3bnzer92wYQN2u50ePXrke3z79u106tQJm83mqnXp0oXU1FT2799PeHh4gfts0aKF6//9/PwICAggMTGxwF8vIqWMYUDcUnMAdOzCc/W6PcwAFNUb/vZvh1w6BaGiZLMV+PKUy5KXzRDU6ylzwHTOQGm7Z/6zyYqA3W5nwYIFrFixgl9++YU333yTp556iv/+978AvPvuu3nG4djt9ly3/fwu/DpTU1OZNGlSvmeNvL29CQsLY8eOHfz6668sWLCAsWPH8sorr7BkyRI8PC78W82QIUN4/PHHWbduHadPn2bfvn0MHjzYdXzEiBEcP36cqVOnEhERgZeXF506dSIzMzPfx8s542L8bZxVVlZWntdz77335juO6WJBpSguQbm5ueXqL78egTzfO5vNhtPpvOznF5ES5siG7d+ZAejQBrNmc4MmN5hrAIW0trK7ckVByEp/nx2WE3py/pvfbLIiZLPZ6NKlC126dOHpp58mIiKC5cuXExISwp49exg2bNhlPX6bNm3YsWOH63JVfnx8fBgwYAADBgxg3LhxNGrUiM2bN9OmTZsLPnZoaCg9evRgzpw5nD59miuuuILq1au7ji9f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vPLKKxw+fJhWrVoxbdo0oqOjS7hTERGRoleWPgcVhERERKTC0hghERERqbAUhERERKTCUhASERGRCktBSERERCosBSERERGpsBSEREREpMJSEBIREZEKS0FIREREKiwFIREREamwFIRERESkwlIQEpEKZeTIkdhsNv7zn//kqn/zzTfYbDaLuhIRqygIiUiF4+3tzUsvvcTJkyetbkVELKYgJCIVTt++falZsyYvvvii1a2IiMUUhESkwrHb7UyePJk333yT/fv3W92OiFhIQUhEKqSBAwfSqlUrJk6caHUrImIhBSERqbBeeuklPvzwQ7Zv3251KyJiEQUhEamwunfvTr9+/XjyySetbkVELOJudQMiIlb6z3/+Q6tWrWjYsKHVrYiIBXRGSEQqtObNmzNs2DCmTZtmdSsiYgEFIRGp8J599lmcTqfVbYiIBWyGYRhWNyEiIiJiBZ0REhERkQpLQUhEREQqLAUhERERqbAUhERERKTCUhASERGRCktBSERERCosBSERERGpsBSEREREpMJSEBIREZEKS0FIREREKiwFIREREamw/h9VGRs6tEfZIwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"data = []\n",
"\n",
"for func, n in product(\n",
" [\"collection_counter\", \"series_value_count\"],\n",
" [1000, 2_000, 5_000, 10_000],\n",
"):\n",
" time_sec = np.array(global_result[(func, n)]).mean()\n",
" data.append({\"func\": func, \"n\": n, \"time_sec\": time_sec})\n",
"data = pd.DataFrame(data)\n",
"_, ax = plt.subplots()\n",
"\n",
"for func, df in data.groupby(\"func\"):\n",
" ax.plot(df[\"n\"], df[\"time_sec\"], label=func, ls=\"solid\", marker=\"x\")\n",
"ax.legend()\n",
"ax.set(\n",
" xlabel=\"N\",\n",
" ylabel=\"time_sec\",\n",
" title=\"Time to value-count N tiny arrays\",\n",
" xscale=\"log\",\n",
" yscale=\"log\",\n",
")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "517692e2-6b6a-4143-bce1-d3b0cbbfbd1f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB0MklEQVR4nO3dd3gUVd/G8e+mNxJKCi30KiAgKAIiKkEQRNHnEfRFATtNwVgAlWYBRWmKgOUR7AUVREEQIkURUWmCIL1JCzWNkmT3vH+MWVlSgJBkUu7PdeWCMzsz+9vdyN6eOeeMwxhjEBERESkmvOwuQERERCQvKdyIiIhIsaJwIyIiIsWKwo2IiIgUKwo3IiIiUqwo3IiIiEixonAjIiIixYrCjYiIiBQrCjciIiJSrCjcSLHTu3dvqlWrZncZRc6MGTNwOBzs2rXL7lLkAlSrVo3evXvbXYZIoaRwI0WCw+G4oJ8lS5bYXWomGzduZOTIkQoNRdzo0aOZPXv2Be27a9cu9+/kl19+menxkSNH4nA4OHLkSI7n+fnnnxk5ciQnTpzIRcUiJZeP3QWIXIgPPvjAo/3++++zcOHCTNvr16/P22+/jcvlKsjycrRx40ZGjRrFddddpx6lImz06NH897//pWvXrhd13HPPPcftt9+Ow+G46Of8+eefGTVqFL1796Z06dIej23evBkvL/3/qUhWFG6kSLj77rs92r/88gsLFy7MtF2kMGnSpAlr165l1qxZ3H777Xl6bn9//zw9X0FISUkhODg403aXy0VqaioBAQE2VCXFkWK/FDvnjrnJuETw6quv8sYbb1CjRg2CgoK48cYb2bt3L8YYnn/+eSpXrkxgYCC33norx44dy3Te7777jjZt2hAcHEypUqXo3Lkzf/75Z461zJgxgzvuuAOA66+/PsvLZ1OmTKFBgwb4+/tTsWJF+vfvf97LEF988QUOh4OlS5dmeuzNN9/E4XCwYcMGAP744w969+5NjRo1CAgIoHz58tx3330cPXo0x+cA63LgyJEjM23ParzHiRMnGDRoENHR0fj7+1OrVi1efvnlC+5FO336NCNHjqROnToEBARQoUIFbr/9drZv3+7eJyUlhccff9z9HHXr1uXVV1/FGOPeJ+PznjFjxnlfT8bloW3btrl7R8LCwrj33ns5efKkx3EpKSm899577s/wQsa73HnnndSpU4fnnnvOo8YLMXLkSJ588kkAqlev7n7ejMub534GGWOmli9fTmxsLBEREQQHB3Pbbbdx+PBh9369evUiPDyctLS0TM954403Urdu3Rzr+vHHH7njjjuoUqUK/v7+REdH89hjj3Hq1CmP/Xr37k1ISAjbt2+nU6dOlCpVih49egDW+zlgwAA++ugj9+/+/PnzAXj11Vdp1aoV5cqVIzAwkGbNmvHFF194nLtt27Y0btw4y/rq1q1Lhw4d3O1PP/2UZs2aUapUKUJDQ2nUqBGTJk3K8TVK0aeeGykxPvroI1JTU3nkkUc4duwYY8eOpVu3btxwww0sWbKEwYMHs23bNl5//XWeeOIJ3n33XfexH3zwAb169aJDhw68/PLLnDx5kqlTp3LNNdewZs2abC83XXvttTz66KO89tprPP3009SvXx/A/efIkSMZNWoUMTEx9O3bl82bNzN16lR+++03li9fjq+vb5bn7dy5MyEhIXz++ee0bdvW47HPPvuMBg0a0LBhQwAWLlzIjh07uPfeeylfvjx//vknb731Fn/++Se//PJLri6XnOvkyZO0bduWffv28fDDD1OlShV+/vlnhg4dyoEDB5g4cWKOxzudTm6++Wbi4uK48847GThwIElJSSxcuJANGzZQs2ZNjDHccsstLF68mPvvv58mTZqwYMECnnzySfbt28eECRNyXX+3bt2oXr06Y8aMYfXq1bzzzjtERkby8ssvA9bn/8ADD3DVVVfx0EMPAVCzZs3zntfb25tnn32Wnj17XnTvze23386WLVv45JNPmDBhAuHh4QBERETkeNwjjzxCmTJlGDFiBLt27WLixIkMGDCAzz77DIB77rmH999/nwULFnDzzTe7jzt48CA//PADI0aMyPH8M2fO5OTJk/Tt25dy5crx66+/8vrrr/P3338zc+ZMj33T09Pp0KED11xzDa+++ipBQUHux3744Qc+//xzBgwYQHh4uPu/oUmTJnHLLbfQo0cPUlNT+fTTT7njjjv49ttv6dy5s/s1PPjgg2zYsMH9ew7w22+/sWXLFp599lnA+t2/6667aNeunfuz3LRpE8uXL2fgwIE5vk4p4oxIEdS/f3+T3a9vr169TNWqVd3tnTt3GsBERESYEydOuLcPHTrUAKZx48YmLS3Nvf2uu+4yfn5+5vTp08YYY5KSkkzp0qXNgw8+6PE8Bw8eNGFhYZm2n2vmzJkGMIsXL/bYHh8fb/z8/MyNN95onE6ne/vkyZMNYN59990cz3vXXXeZyMhIk56e7t524MAB4+XlZZ577jn3tpMnT2Y69pNPPjGAWbZsmXvb9OnTDWB27tzp3gaYESNGZDq+atWqplevXu72888/b4KDg82WLVs89hsyZIjx9vY2e/bsyfG1vPvuuwYw48ePz/SYy+Uyxhgze/ZsA5gXXnjB4/H//ve/xuFwmG3bthlj/v28p0+fnulc576eESNGGMDcd999Hvvddtttply5ch7bgoODPV5zTjJqeOWVV0x6erqpXbu2ady4sfu1ZDzv4cOHczzPK6+8kukzyXDuZ5Dx+cXExLifxxhjHnvsMePt7e3+3Xc6naZy5cqme/fuHucbP368cTgcZseOHTnWlNXv05gxY4zD4TC7d+92b+vVq5cBzJAhQzLtDxgvLy/z559/nvf8qamppmHDhuaGG25wbztx4oQJCAgwgwcP9tj30UcfNcHBwSY5OdkYY8zAgQNNaGiox38jUjLospSUGHfccQdhYWHudosWLQBrPI+Pj4/H9tTUVPbt2wdY//d34sQJ7rrrLo4cOeL+8fb2pkWLFixevDhX9SxatIjU1FQGDRrkMTD0wQcfJDQ0lLlz5+Z4fPfu3YmPj/e4xPXFF1/gcrno3r27e1tgYKD776dPn+bIkSNcffXVAKxevTpXtZ9r5syZtGnThjJlyni8RzExMTidTpYtW5bj8V9++SXh4eE88sgjmR7L6FmaN28e3t7ePProox6PP/744xhj+O6773Jdf58+fTzabdq04ejRoyQmJub6nBkyem/WrVt3wbOtLsVDDz3k0RvXpk0bnE4nu3fvBsDLy4sePXowZ84ckpKS3Pt99NFHtGrViurVq+d4/rN/n1JSUjhy5AitWrXCGMOaNWsy7d+3b98sz9O2bVsuu+yyHM9//PhxEhISaNOmjcfvalhYGLfeeiuffPKJ+3Kf0+nks88+o2vXru5xPaVLlyYlJYWFCxfm+Jqk+FG4kRKjSpUqHu2MoBMdHZ3l9uPHjwOwdetWAG644QYiIiI8fr7//nvi4+NzVU/Gl825Yxz8/PyoUaOG+/HsdOzYkbCwMPflBrAuSTVp0oQ6deq4tx07doyBAwcSFRVFYGAgERER7i+whISEXNV+rq1btzJ//vxM709MTAyA+z06fPgwBw8edP8kJycDsH37durWresRMs+1e/duKlasSKlSpTy2Z1ziO9/7lZNzfzfKlCkD/Ps7cKl69OhBrVq1cjX25mJdyGvp2bMnp06dYtasWYA182rVqlXcc8895z3/nj176N27N2XLliUkJISIiAj3pdFzf598fHyoXLlylufJLkR9++23XH311QQEBFC2bFkiIiKYOnVqpnP37NmTPXv28OOPPwLW/ywcOnTI4zX069ePOnXqcNNNN1G5cmXuu+8+99geKd405kZKDG9v74vanvEllDEg9oMPPqB8+fKZ9svpCzk/+fv707VrV2bNmsWUKVM4dOgQy5cvZ/To0R77devWjZ9//pknn3ySJk2aEBISgsvlomPHjrmeMu90Oj3aLpeL9u3b89RTT2W5f0bYuvLKKz1CyIgRI7IcsHwpshtDdG7NZzvf78Clyui96d27N19//XWenDOn58rK2a/lsssuo1mzZnz44Yf07NmTDz/8ED8/P7p165bjuZ1OJ+3bt+fYsWMMHjyYevXqERwczL59++jdu3em3yd/f/9sp6uf3UOT4ccff+SWW27h2muvZcqUKVSoUAFfX1+mT5/Oxx9/7LFvhw4diIqK4sMPP+Taa6/lww8/pHz58u5ADRAZGcnatWtZsGAB3333Hd999x3Tp0+nZ8+evPfeezm+VinaFG5EziNj4GhkZKTHP5wXKrsv26pVqwLW/zXXqFHDvT01NZWdO3de0HN1796d9957j7i4ODZt2oQxxuOS1PHjx4mLi2PUqFEMHz7cvT2jN+p8ypQpk2nmVmpqKgcOHPDYVrNmTZKTk89b80cffeQxqybjddesWZOVK1eSlpaW7SDqqlWrsmjRIpKSkjx6b/766y/34xk1A5nqvpSeHcj+c7xQd999Ny+88AKjRo3illtuKZDnzEnPnj2JjY3lwIEDfPzxx3Tu3Nn93mVn/fr1bNmyhffee4+ePXu6t+fVZZ8vv/ySgIAAFixY4DHVffr06Zn29fb25v/+7/+YMWMGL7/8MrNnz+bBBx/MFO78/Pzo0qULXbp0weVy0a9fP958802GDRtGrVq18qRuKXx0WUrkPDp06EBoaCijR4/Ocvrs2dNss5Jx/f/cL9uYmBj8/Px47bXXPP6v+n//+x8JCQnumSE5iYmJoWzZsnz22Wd89tlnXHXVVR7d/Rn/0J/bA3G+2UsZatasmWm8zFtvvZWpF6Rbt26sWLGCBQsWZDrHiRMnSE9PB6B169bExMS4fzLCzX/+8x+OHDnC5MmTMx2fUXunTp1wOp2Z9pkwYQIOh4ObbroJgNDQUMLDwzPVPWXKlAt6zdkJDg6+pJWCM3pv1q5dy5w5cy74OSHz705euOuuu3A4HAwcOJAdO3Zc0JpRWf0+GWPybGq1t7c3DofD4/dr165d2Y5Vuueeezh+/DgPP/wwycnJmV7DucsdeHl5cfnllwNw5syZPKlZCif13IicR2hoKFOnTuWee+7hiiuu4M477yQiIoI9e/Ywd+5cWrduneWXcoYmTZrg7e3Nyy+/TEJCAv7+/txwww1ERkYydOhQRo0aRceOHbnlllvYvHkzU6ZM4corr7ygLxtfX19uv/12Pv30U1JSUnj11Vcz1X7ttdcyduxY0tLSqFSpEt9//z07d+68oNf+wAMP0KdPH/7zn//Qvn171q1bx4IFC9zTkjM8+eSTzJkzh5tvvpnevXvTrFkzUlJSWL9+PV988QW7du3KdMzZevbsyfvvv09sbCy//vorbdq0ISUlhUWLFtGvXz9uvfVWunTpwvXXX88zzzzDrl27aNy4Md9//z1ff/01gwYN8pia/cADD/DSSy/xwAMP0Lx5c5YtW8aWLVsu6DVnp1mzZixatIjx48dTsWJFqlev7h6UfqF69OjB888/z9q1ay/4OQGeeeYZ7rzzTnx9fenSpUuWC+FdrIiICDp27MjMmTMpXbr0BYXpevXqUbNmTZ544gn27dtHaGgoX375ZZ6NTercuTPjx4+nY8eO/N///R/x8fG88cYb1KpViz/++CPT/k2bNqVhw4bMnDmT+vXrc8UVV3g8/sADD3Ds2DFuuOEGKleuzO7du3n99ddp0qSJe6yWFFO2zNESuUS5mQr+yiuveOy3ePFiA5iZM2d6bM+YUvvbb79l2r9Dhw4mLCzMBAQEmJo1a5revXub33///bz1vv3226ZGjRrG29s707TwyZMnm3r16hlfX18TFRVl+vbta44fP37ec2ZYuHChAYzD4TB79+7N9Pjff/9tbrvtNlO6dGkTFhZm7rjjDrN///5M06KzmgrudDrN4MGDTXh4uAkKCjIdOnQw27ZtyzQN2RhryvzQoUNNrVq1jJ+fnwkPDzetWrUyr776qklNTT3v6zh58qR55plnTPXq1Y2vr68pX768+e9//2u2b9/u8RyPPfaYqVixovH19TW1a9c2r7zyisfU54xz3X///SYsLMyUKlXKdOvWzcTHx2c7FfzcKdlZvRd//fWXufbaa01gYKABcpwWnt3v3Nnnzup5s/L888+bSpUqGS8vL4+aspsKntXv7bm/cxk+//xzA5iHHnrovHVk2Lhxo4mJiTEhISEmPDzcPPjgg2bdunWZpt/36tXLBAcHZ3kOwPTv3z/Lx/73v/+Z2rVrG39/f1OvXj0zffp09+eUlbFjxxrAjB49OtNjX3zxhbnxxhtNZGSk8fPzM1WqVDEPP/ywOXDgwAW/XimaHMbk89B9EREplL7++mu6du3KsmXLaNOmjd3l5MqkSZN47LHH2LVrV6aZYlJyKdyIiJRQN998M5s2bWLbtm35Ong5vxhjaNy4MeXKlcv1elNSPGnMjYhICfPpp5/yxx9/MHfuXCZNmlTkgk1KSgpz5sxh8eLFrF+/Pt+n10vRo54bEZESxuFwEBISQvfu3Zk2bZptazXl1q5du6hevTqlS5emX79+vPjii3aXJIWMwo2IiIgUK1rnRkRERIoVhRsREREpVorWhdY84HK52L9/P6VKlSpyg+hERERKKmMMSUlJVKxYMdt7lmUoceFm//79me4CLSIiIkXD3r17s73bfIYSF24ybri3d+9eQkNDba5GRERELkRiYiLR0dEeN87NTokLNxmXokJDQxVuREREipgLGVKiAcUiIiJSrCjciIiISLGicCMiIiLFSokbc3OhnE4naWlpdpchcsn8/PzOO21SRKQ4sTXcLFu2jFdeeYVVq1Zx4MABZs2aRdeuXXM8ZsmSJcTGxvLnn38SHR3Ns88+S+/evfOsJmMMBw8e5MSJE3l2ThE7eXl5Ub16dfz8/OwuRUSkQNgablJSUmjcuDH33Xcft99++3n337lzJ507d6ZPnz589NFHxMXF8cADD1ChQgU6dOiQJzVlBJvIyEiCgoK00J8UaRmLVh44cIAqVaro91lESgRbw81NN93ETTfddMH7T5s2jerVqzNu3DgA6tevz08//cSECRPyJNw4nU53sClXrtwln0+kMIiIiGD//v2kp6fj6+trdzkiIvmuSF2IX7FiBTExMR7bOnTowIoVK7I95syZMyQmJnr8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aBkdVVrvRkREpOjI+N6+kAtOJS7cJCUlAWi9GxERkSIoKSmJsLCwHPcpcWNuXC4X+/fvp1SpUjgcDrvLKZQSExOJjo5m7969GpdUCOjzKFz0eRQ++kwKl/z6PIwxJCUlUbFiRY+JRlkpcT03Xl5eVK5c2e4yigStC1S46PMoXPR5FD76TAqX/Pg8ztdjk0EDikVERKRYUbgRERGRYkXhRjLx9/dnxIgR+Pv7212KoM+jsNHnUfjoMylcCsPnUeIGFIuIiEjxpp4bERERKVYUbkRERKRYUbgRERGRYkXhRkRERIoVhZtiasyYMVx55ZWUKlWKyMhIunbtyubNmz32OX36NP3796dcuXKEhITwn//8h0OHDnnss2fPHjp37kxQUBCRkZE8+eSTpKene+yzZMkSrrjiCvz9/alVqxYzZszI75dXpL300ks4HA4GDRrk3qbPouDt27ePu+++m3LlyhEYGEijRo34/fff3Y8bYxg+fDgVKlQgMDCQmJgYtm7d6nGOY8eO0aNHD0JDQyldujT3338/ycnJHvv88ccftGnThoCAAKKjoxk7dmyBvL6ixOl0MmzYMKpXr05gYCA1a9bk+eef97iHkD6P/LNs2TK6dOlCxYoVcTgczJ492+PxgnzvZ86cSb169QgICKBRo0bMmzcvdy/KSLHUoUMHM336dLNhwwazdu1a06lTJ1OlShWTnJzs3qdPnz4mOjraxMXFmd9//91cffXVplWrVu7H09PTTcOGDU1MTIxZs2aNmTdvngkPDzdDhw5177Njxw4TFBRkYmNjzcaNG83rr79uvL29zfz58wv09RYVv/76q6lWrZq5/PLLzcCBA93b9VkUrGPHjpmqVaua3r17m5UrV5odO3aYBQsWmG3btrn3eemll0xYWJiZPXu2WbdunbnllltM9erVzalTp9z7dOzY0TRu3Nj88ssv5scffzS1atUyd911l/vxhIQEExUVZXr06GE2bNhgPvnkExMYGGjefPPNAn29hd2LL75oypUrZ7799luzc+dOM3PmTBMSEmImTZrk3kefR/6ZN2+eeeaZZ8xXX31lADNr1iyPxwvqvV++fLnx9vY2Y8eONRs3bjTPPvus8fX1NevXr7/o16RwU0LEx8cbwCxdutQYY8yJEyeMr6+vmTlzpnufTZs2GcCsWLHCGGP9wnt5eZmDBw+695k6daoJDQ01Z86cMcYY89RTT5kGDRp4PFf37t1Nhw4d8vslFTlJSUmmdu3aZuHChaZt27bucKPPouANHjzYXHPNNdk+7nK5TPny5c0rr7zi3nbixAnj7+9vPvnkE2OMMRs3bjSA+e2339z7fPfdd8bhcJh9+/YZY4yZMmWKKVOmjPszynjuunXr5vVLKtI6d+5s7rvvPo9tt99+u+nRo4cxRp9HQTo33BTke9+tWzfTuXNnj3patGhhHn744Yt+HbosVUIkJCQAULZsWQBWrVpFWloaMTEx7n3q1atHlSpVWLFiBQArVqygUaNGREVFuffp0KEDiYmJ/Pnnn+59zj5Hxj4Z55B/9e/fn86dO2d6v/RZFLw5c+bQvHlz7rjjDiIjI2natClvv/22+/GdO3dy8OBBj/czLCyMFi1aeHwmpUuXpnnz5u59YmJi8PLyYuXKle59rr32Wvz8/Nz7dOjQgc2bN3P8+PH8fplFRqtWrYiLi2PLli0ArFu3jp9++ombbroJ0Odhp4J87/Py3zCFmxLA5XIxaNAgWrduTcOGDQE4ePAgfn5+lC5d2mPfqKgoDh486N7n7C/TjMczHstpn8TERE6dOpUfL6dI+vTTT1m9ejVjxozJ9Jg+i4K3Y8cOpk6dSu3atVmwYAF9+/bl0Ucf5b333gP+fU+zej/Pfr8jIyM9Hvfx8aFs2bIX9bkJDBkyhDvvvJN69erh6+tL06ZNGTRoED169AD0edipIN/77PbJzWdT4u4KXhL179+fDRs28NNPP9ldSom0d+9eBg4cyMKFCwkICLC7HMEK/M2bN2f06NEANG3alA0bNjBt2jR69eplc3Ulz+eff85HH33Exx9/TIMGDVi7di2DBg2iYsWK+jwkV9RzU8wNGDCAb7/9lsWLF1O5cmX39vLly5OamsqJEyc89j906BDly5d373PujJ2M9vn2CQ0NJTAwMK9fTpG0atUq4uPjueKKK/Dx8cHHx4elS5fy2muv4ePjQ1RUlD6LAlahQgUuu+wyj23169dnz549wL/vaVbv59nvd3x8vMfj6enpHDt27KI+N4Enn3zS3XvTqFEj7rnnHh577DF3T6c+D/sU5Huf3T65+WwUboopYwwDBgxg1qxZ/PDDD1SvXt3j8WbNmuHr60tcXJx72+bNm9mzZw8tW7YEoGXLlqxfv97jl3bhwoWEhoa6vxhatmzpcY6MfTLOIdCuXTvWr1/P2rVr3T/NmzenR48e7r/rsyhYrVu3zrQ0wpYtW6hatSoA1atXp3z58h7vZ2JiIitXrvT4TE6cOMGqVavc+/zwww+4XC5atGjh3mfZsmWkpaW591m4cCF169alTJky+fb6ipqTJ0/i5eX5deTt7Y3L5QL0edipIN/7PP037KKHIEuR0LdvXxMWFmaWLFliDhw44P45efKke58+ffqYKlWqmB9++MH8/vvvpmXLlqZly5buxzOmH994441m7dq1Zv78+SYiIiLL6cdPPvmk2bRpk3njjTc0/fgCnD1byhh9FgXt119/NT4+PubFF180W7duNR999JEJCgoyH374oXufl156yZQuXdp8/fXX5o8//jC33nprltNfmzZtalauXGl++uknU7t2bY/prydOnDBRUVHmnnvuMRs2bDCffvqpCQoKKvFTj8/Vq1cvU6lSJfdU8K+++sqEh4ebp556yr2PPo/8k5SUZNasWWPWrFljADN+/HizZs0as3v3bmNMwb33y5cvNz4+PubVV181mzZtMiNGjNBUcPEEZPkzffp09z6nTp0y/fr1M2XKlDFBQUHmtttuMwcOHPA4z65du8xNN91kAgMDTXh4uHn88cdNWlqaxz6LFy82TZo0MX5+fqZGjRoezyFZOzfc6LMoeN98841p2LCh8ff3N/Xq1TNvvfWWx+Mul8sMGzbMREVFGX9/f9OuXTuzefNmj32OHj1q7rrrLhMSEmJCQ0PNvffea5KSkjz2WbdunbnmmmuMv7+/qVSpknnppZfy/bUVNYmJiWbgwIGmSpUqJiAgwNSoUcM888wzHtOG9Xnkn8WLF2f5fdGrVy9jTMG+959//rmpU6eO8fPzMw0aNDBz587N1WtyGHPWEpAiIiIiRZzG3IiIiEixonAjIiIixYrCjYiIiBQrCjciIiJSrCjciIiISLGicCMiIiLFisKNiIiIFCsKNyIiIlKsKNyISJHXu3dvHA4HL730ksf22bNn43A4bKpKROyicCMixUJAQAAvv/wyx48ft7sUEbGZwo2IFAsxMTGUL1+eMWPG2F2KiNhM4UZEigVvb29Gjx7N66+/zt9//213OSJiI4UbESk2brvtNpo0acKIESPsLkVEbKRwIyLFyssvv8x7773Hpk2b7C5FRGyicCMixcq1115Lhw4dGDp0qN2liIhNfOwuQEQkr7300ks0adKEunXr2l2KiNhAPTciUuw0atSIHj168Nprr9ldiojYQOFGRIql5557DpfLZXcZImIDhzHG2F2EiIiISF5Rz42IiIgUKwo3IiIiUqwo3IiIiEixonAjIiIixYrCjYiIiBQrCjciIiJSrCjciIiISLGicCMiIiLFisKNiIiIFCsKNyIiIlKsKNyIiIhIsaJwIyIiIsXK/wP/v7Bps5We9wAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"data = []\n",
"\n",
"for func, n in product(\n",
" [\"collection_counter\", \"series_value_count\"],\n",
" [1000, 2_000, 5_000, 10_000],\n",
"):\n",
" time_sec = np.array(global_result[(func, n)]).mean()\n",
" data.append({\"func\": func, \"n\": n, \"time_sec\": time_sec})\n",
"data = pd.DataFrame(data)\n",
"_, ax = plt.subplots()\n",
"\n",
"for func, df in data.groupby(\"func\"):\n",
" ax.plot(df[\"n\"], df[\"time_sec\"], label=func, ls=\"solid\", marker=\"x\")\n",
"ax.legend()\n",
"ax.set(\n",
" xlabel=\"N\",\n",
" ylabel=\"time_sec\",\n",
" title=\"Time to value-count N tiny arrays\",\n",
")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b2a5cb83-fd70-48e9-a103-8dfb7332e495",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment