Created
September 9, 2020 17:09
-
-
Save eric-czech/5c48337c034f7470328c55d93fcc730e to your computer and use it in GitHub Desktop.
Dask svd transpose and sign flip benchmark
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Dask SVD Benchmarks\n", | |
"\n", | |
"These benchmarks look at compute times for tall-skinny/short-fat SVD and different sign correction methods." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import tqdm\n", | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"import plotnine as pn\n", | |
"import os.path as osp\n", | |
"import dask.array as da\n", | |
"from dask.array.linalg import tsqr" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def svd_flip1(u, v):\n", | |
" # Scikit-learn sign correction \n", | |
" # *uses sign of maximum value in eigenvector\n", | |
" u, v = da.asarray(u), da.asarray(v)\n", | |
" max_abs_cols = np.argmax(np.abs(u), axis=0)\n", | |
" signs = np.sign(u.vindex[max_abs_cols, range(u.shape[1])])\n", | |
" u *= signs\n", | |
" v *= signs[:, np.newaxis]\n", | |
" return u, v\n", | |
"\n", | |
"def svd_flip2(u, v):\n", | |
" # Correction using sign for vectors that puts them\n", | |
" # in same half-space as an arbitrary vecotor (all ones)\n", | |
" u, v = da.asarray(u), da.asarray(v)\n", | |
" signs = np.dot(np.ones_like(u[:,0])[np.newaxis], u)\n", | |
" signs = 2*((signs >= 0) - .5)\n", | |
" u, v = u * signs, v * signs.T\n", | |
" return u, v\n", | |
"\n", | |
"\n", | |
"def svd(a):\n", | |
" nb = a.numblocks\n", | |
" if a.ndim != 2:\n", | |
" raise ValueError(\n", | |
" \"Array must be 2D.\\n\"\n", | |
" \"Input shape: {}\\n\"\n", | |
" \"Input ndim: {}\\n\".format(a.shape, a.ndim)\n", | |
" )\n", | |
" if nb[0] > 1 and nb[1] > 1:\n", | |
" raise ValueError(\n", | |
" \"Array must be chunked in one dimension only. \"\n", | |
" \"This function (svd) only supports tall-and-skinny or short-and-fat \"\n", | |
" \"matrices (see da.linalg.svd_compressed for SVD on fully chunked arrays).\\n\"\n", | |
" \"Input shape: {}\\n\"\n", | |
" \"Input numblocks: {}\\n\".format(a.shape, nb)\n", | |
" )\n", | |
"\n", | |
" # Tall-and-skinny case\n", | |
" if nb[0] >= nb[1]:\n", | |
" u, s, v = tsqr(a, compute_svd=True)\n", | |
" return u, s, v\n", | |
" # Short-and-fat case\n", | |
" else:\n", | |
" vt, s, ut = tsqr(a.T, compute_svd=True)\n", | |
" return ut.T, s, vt.T\n", | |
" " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def run(x, svd_flip=None):\n", | |
" m, n = x.shape\n", | |
" k = min(m, n)\n", | |
" u, s, v = svd(x)\n", | |
" u, v = u[:, :k], v[:k, :]\n", | |
" if svd_flip:\n", | |
" u, v = svd_flip(u, v)\n", | |
" # Ensure that aggregation is across same\n", | |
" # number of elements regardless of transposition\n", | |
" assert k**2 + k*max(m, n) == u.size + v.size\n", | |
" return (u.mean() + v.mean()).compute()\n", | |
"\n", | |
"def benchmark():\n", | |
" df = []\n", | |
" for arg in tqdm.tqdm([\n", | |
" (s, t, fn)\n", | |
" for s in 10**np.arange(2, 8)\n", | |
" for t in [True, False]\n", | |
" for fn in [None, svd_flip1, svd_flip2]\n", | |
" ]):\n", | |
" s, t, fn = arg\n", | |
" if t:\n", | |
" m, n, c = 100, s, (-1, 1000)\n", | |
" else:\n", | |
" m, n, c = s, 100, (1000, -1)\n", | |
" x = da.random.random((m, n), chunks=c)\n", | |
" f = fn.__name__ if fn else 'None'\n", | |
" k = f'svd-shape={m:08d}x{n:08d}-t={t}-flip={f}'\n", | |
" r = %timeit -n 1 -r 1 -o -q run(x, svd_flip=fn)\n", | |
" df.append(dict(op=k, time=r.average, transpose=t, s=s, m=m, n=n))\n", | |
" return pd.DataFrame(df)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████| 36/36 [23:31<00:00, 39.20s/it] " | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 31min 50s, sys: 2min 19s, total: 34min 9s\n", | |
"Wall time: 23min 31s\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"df = benchmark()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>op</th>\n", | |
" <th>time</th>\n", | |
" <th>transpose</th>\n", | |
" <th>s</th>\n", | |
" <th>m</th>\n", | |
" <th>n</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>svd-shape=00000100x00000100-t=True-flip=None</td>\n", | |
" <td>0.035216</td>\n", | |
" <td>True</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>svd-shape=00000100x00000100-t=True-flip=svd_flip1</td>\n", | |
" <td>0.070028</td>\n", | |
" <td>True</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>svd-shape=00000100x00000100-t=True-flip=svd_flip2</td>\n", | |
" <td>0.045620</td>\n", | |
" <td>True</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>svd-shape=00000100x00000100-t=False-flip=None</td>\n", | |
" <td>0.026825</td>\n", | |
" <td>False</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>svd-shape=00000100x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>0.057928</td>\n", | |
" <td>False</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>svd-shape=00000100x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>0.048828</td>\n", | |
" <td>False</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>svd-shape=00000100x00001000-t=True-flip=None</td>\n", | |
" <td>0.155585</td>\n", | |
" <td>True</td>\n", | |
" <td>1000</td>\n", | |
" <td>100</td>\n", | |
" <td>1000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>svd-shape=00000100x00001000-t=True-flip=svd_flip1</td>\n", | |
" <td>0.195429</td>\n", | |
" <td>True</td>\n", | |
" <td>1000</td>\n", | |
" <td>100</td>\n", | |
" <td>1000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>svd-shape=00000100x00001000-t=True-flip=svd_flip2</td>\n", | |
" <td>0.143165</td>\n", | |
" <td>True</td>\n", | |
" <td>1000</td>\n", | |
" <td>100</td>\n", | |
" <td>1000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>svd-shape=00001000x00000100-t=False-flip=None</td>\n", | |
" <td>0.026245</td>\n", | |
" <td>False</td>\n", | |
" <td>1000</td>\n", | |
" <td>1000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>svd-shape=00001000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>0.083132</td>\n", | |
" <td>False</td>\n", | |
" <td>1000</td>\n", | |
" <td>1000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>svd-shape=00001000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>0.048468</td>\n", | |
" <td>False</td>\n", | |
" <td>1000</td>\n", | |
" <td>1000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>svd-shape=00000100x00010000-t=True-flip=None</td>\n", | |
" <td>0.176544</td>\n", | |
" <td>True</td>\n", | |
" <td>10000</td>\n", | |
" <td>100</td>\n", | |
" <td>10000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>svd-shape=00000100x00010000-t=True-flip=svd_flip1</td>\n", | |
" <td>0.340822</td>\n", | |
" <td>True</td>\n", | |
" <td>10000</td>\n", | |
" <td>100</td>\n", | |
" <td>10000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>svd-shape=00000100x00010000-t=True-flip=svd_flip2</td>\n", | |
" <td>0.188778</td>\n", | |
" <td>True</td>\n", | |
" <td>10000</td>\n", | |
" <td>100</td>\n", | |
" <td>10000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>svd-shape=00010000x00000100-t=False-flip=None</td>\n", | |
" <td>0.170558</td>\n", | |
" <td>False</td>\n", | |
" <td>10000</td>\n", | |
" <td>10000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>svd-shape=00010000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>0.352508</td>\n", | |
" <td>False</td>\n", | |
" <td>10000</td>\n", | |
" <td>10000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>svd-shape=00010000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>0.200808</td>\n", | |
" <td>False</td>\n", | |
" <td>10000</td>\n", | |
" <td>10000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>svd-shape=00000100x00100000-t=True-flip=None</td>\n", | |
" <td>1.596125</td>\n", | |
" <td>True</td>\n", | |
" <td>100000</td>\n", | |
" <td>100</td>\n", | |
" <td>100000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>svd-shape=00000100x00100000-t=True-flip=svd_flip1</td>\n", | |
" <td>2.972658</td>\n", | |
" <td>True</td>\n", | |
" <td>100000</td>\n", | |
" <td>100</td>\n", | |
" <td>100000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>svd-shape=00000100x00100000-t=True-flip=svd_flip2</td>\n", | |
" <td>1.669828</td>\n", | |
" <td>True</td>\n", | |
" <td>100000</td>\n", | |
" <td>100</td>\n", | |
" <td>100000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21</th>\n", | |
" <td>svd-shape=00100000x00000100-t=False-flip=None</td>\n", | |
" <td>1.576585</td>\n", | |
" <td>False</td>\n", | |
" <td>100000</td>\n", | |
" <td>100000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>svd-shape=00100000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>3.250241</td>\n", | |
" <td>False</td>\n", | |
" <td>100000</td>\n", | |
" <td>100000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>23</th>\n", | |
" <td>svd-shape=00100000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>1.777083</td>\n", | |
" <td>False</td>\n", | |
" <td>100000</td>\n", | |
" <td>100000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>24</th>\n", | |
" <td>svd-shape=00000100x01000000-t=True-flip=None</td>\n", | |
" <td>15.926513</td>\n", | |
" <td>True</td>\n", | |
" <td>1000000</td>\n", | |
" <td>100</td>\n", | |
" <td>1000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25</th>\n", | |
" <td>svd-shape=00000100x01000000-t=True-flip=svd_flip1</td>\n", | |
" <td>29.386280</td>\n", | |
" <td>True</td>\n", | |
" <td>1000000</td>\n", | |
" <td>100</td>\n", | |
" <td>1000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>26</th>\n", | |
" <td>svd-shape=00000100x01000000-t=True-flip=svd_flip2</td>\n", | |
" <td>16.266387</td>\n", | |
" <td>True</td>\n", | |
" <td>1000000</td>\n", | |
" <td>100</td>\n", | |
" <td>1000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>27</th>\n", | |
" <td>svd-shape=01000000x00000100-t=False-flip=None</td>\n", | |
" <td>15.812370</td>\n", | |
" <td>False</td>\n", | |
" <td>1000000</td>\n", | |
" <td>1000000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>28</th>\n", | |
" <td>svd-shape=01000000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>32.089944</td>\n", | |
" <td>False</td>\n", | |
" <td>1000000</td>\n", | |
" <td>1000000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>29</th>\n", | |
" <td>svd-shape=01000000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>17.603258</td>\n", | |
" <td>False</td>\n", | |
" <td>1000000</td>\n", | |
" <td>1000000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30</th>\n", | |
" <td>svd-shape=00000100x10000000-t=True-flip=None</td>\n", | |
" <td>159.371912</td>\n", | |
" <td>True</td>\n", | |
" <td>10000000</td>\n", | |
" <td>100</td>\n", | |
" <td>10000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>31</th>\n", | |
" <td>svd-shape=00000100x10000000-t=True-flip=svd_flip1</td>\n", | |
" <td>291.509138</td>\n", | |
" <td>True</td>\n", | |
" <td>10000000</td>\n", | |
" <td>100</td>\n", | |
" <td>10000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32</th>\n", | |
" <td>svd-shape=00000100x10000000-t=True-flip=svd_flip2</td>\n", | |
" <td>162.525468</td>\n", | |
" <td>True</td>\n", | |
" <td>10000000</td>\n", | |
" <td>100</td>\n", | |
" <td>10000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>33</th>\n", | |
" <td>svd-shape=10000000x00000100-t=False-flip=None</td>\n", | |
" <td>156.984482</td>\n", | |
" <td>False</td>\n", | |
" <td>10000000</td>\n", | |
" <td>10000000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>34</th>\n", | |
" <td>svd-shape=10000000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>319.845724</td>\n", | |
" <td>False</td>\n", | |
" <td>10000000</td>\n", | |
" <td>10000000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>35</th>\n", | |
" <td>svd-shape=10000000x00000100-t=False-flip=svd_f...</td>\n", | |
" <td>176.089086</td>\n", | |
" <td>False</td>\n", | |
" <td>10000000</td>\n", | |
" <td>10000000</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" op time transpose \\\n", | |
"0 svd-shape=00000100x00000100-t=True-flip=None 0.035216 True \n", | |
"1 svd-shape=00000100x00000100-t=True-flip=svd_flip1 0.070028 True \n", | |
"2 svd-shape=00000100x00000100-t=True-flip=svd_flip2 0.045620 True \n", | |
"3 svd-shape=00000100x00000100-t=False-flip=None 0.026825 False \n", | |
"4 svd-shape=00000100x00000100-t=False-flip=svd_f... 0.057928 False \n", | |
"5 svd-shape=00000100x00000100-t=False-flip=svd_f... 0.048828 False \n", | |
"6 svd-shape=00000100x00001000-t=True-flip=None 0.155585 True \n", | |
"7 svd-shape=00000100x00001000-t=True-flip=svd_flip1 0.195429 True \n", | |
"8 svd-shape=00000100x00001000-t=True-flip=svd_flip2 0.143165 True \n", | |
"9 svd-shape=00001000x00000100-t=False-flip=None 0.026245 False \n", | |
"10 svd-shape=00001000x00000100-t=False-flip=svd_f... 0.083132 False \n", | |
"11 svd-shape=00001000x00000100-t=False-flip=svd_f... 0.048468 False \n", | |
"12 svd-shape=00000100x00010000-t=True-flip=None 0.176544 True \n", | |
"13 svd-shape=00000100x00010000-t=True-flip=svd_flip1 0.340822 True \n", | |
"14 svd-shape=00000100x00010000-t=True-flip=svd_flip2 0.188778 True \n", | |
"15 svd-shape=00010000x00000100-t=False-flip=None 0.170558 False \n", | |
"16 svd-shape=00010000x00000100-t=False-flip=svd_f... 0.352508 False \n", | |
"17 svd-shape=00010000x00000100-t=False-flip=svd_f... 0.200808 False \n", | |
"18 svd-shape=00000100x00100000-t=True-flip=None 1.596125 True \n", | |
"19 svd-shape=00000100x00100000-t=True-flip=svd_flip1 2.972658 True \n", | |
"20 svd-shape=00000100x00100000-t=True-flip=svd_flip2 1.669828 True \n", | |
"21 svd-shape=00100000x00000100-t=False-flip=None 1.576585 False \n", | |
"22 svd-shape=00100000x00000100-t=False-flip=svd_f... 3.250241 False \n", | |
"23 svd-shape=00100000x00000100-t=False-flip=svd_f... 1.777083 False \n", | |
"24 svd-shape=00000100x01000000-t=True-flip=None 15.926513 True \n", | |
"25 svd-shape=00000100x01000000-t=True-flip=svd_flip1 29.386280 True \n", | |
"26 svd-shape=00000100x01000000-t=True-flip=svd_flip2 16.266387 True \n", | |
"27 svd-shape=01000000x00000100-t=False-flip=None 15.812370 False \n", | |
"28 svd-shape=01000000x00000100-t=False-flip=svd_f... 32.089944 False \n", | |
"29 svd-shape=01000000x00000100-t=False-flip=svd_f... 17.603258 False \n", | |
"30 svd-shape=00000100x10000000-t=True-flip=None 159.371912 True \n", | |
"31 svd-shape=00000100x10000000-t=True-flip=svd_flip1 291.509138 True \n", | |
"32 svd-shape=00000100x10000000-t=True-flip=svd_flip2 162.525468 True \n", | |
"33 svd-shape=10000000x00000100-t=False-flip=None 156.984482 False \n", | |
"34 svd-shape=10000000x00000100-t=False-flip=svd_f... 319.845724 False \n", | |
"35 svd-shape=10000000x00000100-t=False-flip=svd_f... 176.089086 False \n", | |
"\n", | |
" s m n \n", | |
"0 100 100 100 \n", | |
"1 100 100 100 \n", | |
"2 100 100 100 \n", | |
"3 100 100 100 \n", | |
"4 100 100 100 \n", | |
"5 100 100 100 \n", | |
"6 1000 100 1000 \n", | |
"7 1000 100 1000 \n", | |
"8 1000 100 1000 \n", | |
"9 1000 1000 100 \n", | |
"10 1000 1000 100 \n", | |
"11 1000 1000 100 \n", | |
"12 10000 100 10000 \n", | |
"13 10000 100 10000 \n", | |
"14 10000 100 10000 \n", | |
"15 10000 10000 100 \n", | |
"16 10000 10000 100 \n", | |
"17 10000 10000 100 \n", | |
"18 100000 100 100000 \n", | |
"19 100000 100 100000 \n", | |
"20 100000 100 100000 \n", | |
"21 100000 100000 100 \n", | |
"22 100000 100000 100 \n", | |
"23 100000 100000 100 \n", | |
"24 1000000 100 1000000 \n", | |
"25 1000000 100 1000000 \n", | |
"26 1000000 100 1000000 \n", | |
"27 1000000 1000000 100 \n", | |
"28 1000000 1000000 100 \n", | |
"29 1000000 1000000 100 \n", | |
"30 10000000 100 10000000 \n", | |
"31 10000000 100 10000000 \n", | |
"32 10000000 100 10000000 \n", | |
"33 10000000 10000000 100 \n", | |
"34 10000000 10000000 100 \n", | |
"35 10000000 10000000 100 " | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"<ggplot: (8734030158685)>" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"pdf = df.assign(flip=lambda df: df.op.str.extract('(flip=.*)'))\n", | |
"(\n", | |
" pn.ggplot(\n", | |
" pdf,\n", | |
" pn.aes(x='s', y='time', color='flip', linetype='transpose')\n", | |
" ) +\n", | |
" pn.geom_line() + \n", | |
" pn.geom_point() +\n", | |
" pn.scale_x_log10() + \n", | |
" pn.scale_y_log10() + \n", | |
" pn.labs(\n", | |
" x='N (array size)', y='Time (seconds)', title='SVD Times', \n", | |
" color='Sign Flip', linetype='Transpose Inputs'\n", | |
" )\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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AgAAFGdLly5V7969NWrUKKWlpd32pXQLFy5UdHS0zp07p+rVq6tPnz6Wtvr166t06dJ5fp566ilJ0sGDBxUdHa3t27fr0qVLWr9+vapXry5fX189+uij+vTTTy39rVixQo899pi8vb21bt06TZo0Sd9++60SExN1+PBhJScn37LW2rVra+/evZKk5ORk7dix47bfR3JysuLj45WYmKivv/5aEyZM0IYNG2673710Ry9See2115SRkaHw8HBFRERY2m5MfAcAAEDh6NOnjxo1aiRnZ2dNmzZNmzdv1okTJyRJu3btUmpqap6f1atXS5Ls7e2VmZmpvXv3KisrS/7+/pYB0D59+mj58uWWYy1fvtwS0GNjYxUWFmY59tSpU5WTk1Pg55eTk6MpU6bI2dlZjRs3Vv/+/a1qKgoMz7coUaKE3nrrrTzbvvrqq7suCAAAADdXuXJly8+lS5eWh4eHTp48aXXz4a1Ur15d7777riZOnKiQkBA99thjmjVrlipVqqTu3btr6NChOnz4sK5evaqjR4+qS5cukqRTp07poYceynXsglaqVCmVKlXKsuzv76+1a9cW+HHuRr5GoLOysu6o8zvdDwAAAHlLTEy0/Hzx4kVdunRJFStWlCTVrVtX7u7ueX46duxo2a9Xr17avHmzjh07JicnJ40aNUqS5O7urs6dO2vFihVatmyZnnnmGbm6ukqSKlSokOexC9o/+01MTLScX1GRrxHoKlWqKDw8XP3795enp+dtt//xxx81c+ZMNW7cWFFRUXddZEFzdHQsEo+DSbV1AcB9omTJkoXWd2qh9QwUH4V5DcK45cuXq2/fvqpVq5bGjBmjFi1aWEafb8w3vpWDBw/q5MmTatGihZydneXi4qJr165Z2vv06aNRo0YpMzNT8+fPt6zv2bOnevfubTl2RESE7OwMzwa+LTs7O0VGRmrmzJnat2+fFi9erJUrV0q6/gjlzMxMZWZmSpLlf52d7+27JPIVoGNiYhQVFaUxY8aodevWatGiherVq6dy5crJyclJqampio+P144dO/Tf//5XycnJGjJkiAYPHlzY9d+Rq1ev6urVq7YuA0A+/fnnn7YuAXigFZVrsCgMfhUFYWFhGjp0qHbv3q0mTZoYnh+cmZmpiIgI7du3TyVKlFCzZs0UExNjae/QoYNSU1Nlb29v9YbpDh06KCIi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kKenp0wmk3788UdL0P+7wMDAOzrH28nKylJKSopViD579qzl3CTJ2dlZV69etdrvRvC/nfx+xwAA22AEGngApKeny8HBwSpcL1++/K77rVixol577TXVr19f+/fvt2r76quvrJa//PJLubq6ql69epKkli1b6vvvv9f58+ct2xw/flxbt25Vq1atch3Ly8tLAwcO1OOPP245Vrt27SRJ58+f17/+9a9cn5IlS971Od7M388vOztb33zzjZo2bWpZ5+fnl+s7WbdundXyP0f383Kr7xgAYBuMQAMPgMcff1zvvvuuhg8frm7duumnn37S0qVL76ivl156SWXKlNEjjzyiMmXKaMuWLfr99981dOhQq+2OHj2qAQMGKDQ0VL/++qumTZumV1991TJqO3LkSH388cdq3769xo4da3kKh6enp4YNGyZJGjdunM6fP6/g4GB5e3tr9+7d+u9//6tRo0ZJkmrWrKlhw4apb9++Gj16tJo2baqsrCwdOnRIGzZs0KpVq+78S7sFR0dHTZo0SRkZGQoICNAHH3ygEydOKCIiwrLNs88+qyFDhmjChAlq3ry5/u///k/bt2+36sfHx0elS5dWbGysAgIC5OTkpPr162v48OH5+o4BALZBgAYeAJ06ddK0adM0Z84cffzxx2rRooVWr16tmjVrGu6refPmmj9/vubPn68rV65Ynrs8cOBAq+0mT56suLg49ejRQ/b29ho6dKgmT55saa9UqZI2bdqk8PBw9e3bV3Z2dmrTpo1mzpxpubGwSZMmevfdd7Vy5UpdunRJfn5+Gj16tKKioiz9zJ49W4GBgYqJidHEiRPl5uamwMBAhYSE3OG3dXsODg6KjY3VsGHDtHv3bgUEBOiLL75Q/fr1LdsMGjRIR48e1dy5c/XOO+8oNDRUkyZNUr9+/Szb2NnZaeHChRo7dqzatWunzMxMxcfH5/s7BgDYhslsNpttXQSA4uPGC0I+++wzPfvss7Yup8CNHz9eM2bMUFpamq1LAQDYCHOgAQAAAAMI0AAAAIABTOEAAAAADGAEGgAAADCAAA0AAAAYQIAGAAAADCBAAwAAAAYQoAEAAAADCNAAAACAAQRoAAAAwAACNAAAAGDA/wdEW2UnSjReWwAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"<ggplot: (8733971587229)>" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"pdf = df.assign(flip=lambda df: df.op.str.extract('(flip=.*)'))\n", | |
"(\n", | |
" pn.ggplot(\n", | |
" pdf[pdf['s'] == 1e7],\n", | |
" pn.aes(x='transpose', y='time', fill='flip')\n", | |
" ) +\n", | |
" pn.geom_bar(stat='identity', position='dodge') + \n", | |
" pn.labs(x='Transpose Inputs', y='Time (seconds)', title='Times at N=1e7', fill='Sign Flip')\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.7.6" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment