Last active
April 13, 2020 14:21
-
-
Save programus/fce1bc1f34291d2e455f2d03893cbc32 to your computer and use it in GitHub Desktop.
This file contains 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": [ | |
"# PythonのパフォーマンスについてのTIPS" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:18.487110Z", | |
"start_time": "2020-04-13T14:14:18.473767Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# just some preparation\n", | |
"from IPython.core import page\n", | |
"page.page = print" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 実行時間の測定\n", | |
"パフォーマンス改善するにまず最初のステップはボトルネックを掴むこと。\n", | |
"\n", | |
"人の感覚は信用できないので、感覚的ではなく、実際の実行時間を測定するのは一番重要なことである。\n", | |
"\n", | |
"### 1. Pythonコードの実行時間を測定する方法" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:23.785805Z", | |
"start_time": "2020-04-13T14:14:18.518423Z" | |
}, | |
"_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0", | |
"_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a" | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 4.22 s, sys: 281 ms, total: 4.5 s\n", | |
"Wall time: 5.26 s\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"heavy_job = [x ** 3 for x in range(9999999)]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 2. Pythonコードの平均実行時間を測定する方法" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:24.154768Z", | |
"start_time": "2020-04-13T14:14:23.790703Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.34769509399999965" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# without jupyter notebook\n", | |
"import timeit\n", | |
"\n", | |
"def factorial(n):\n", | |
" return n * factorial(n - 1) if n > 0 else 1\n", | |
"\n", | |
"timeit.timeit('sum(map(factorial, range(500)))', globals = globals(), number = 10)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:27.249983Z", | |
"start_time": "2020-04-13T14:14:24.164705Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"41.2 ms ± 10.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%%timeit -n 10\n", | |
"\n", | |
"def factorial(n):\n", | |
" return n * factorial(n - 1) if n > 0 else 1\n", | |
"\n", | |
"sum(map(factorial, range(500)))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 3. ステップ毎の実行時間測定" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:27.261265Z", | |
"start_time": "2020-04-13T14:14:27.252388Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"def relu(x):\n", | |
" return x if x > 0 else 0\n", | |
"\n", | |
"def test():\n", | |
" result = [relu(x) for x in range(200000)]\n", | |
" return result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:29.769716Z", | |
"start_time": "2020-04-13T14:14:27.263935Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" 200006 function calls in 0.644 seconds\n", | |
"\n", | |
" Ordered by: standard name\n", | |
"\n", | |
" ncalls tottime percall cumtime percall filename:lineno(function)\n", | |
" 1 0.000 0.000 0.644 0.644 :0(exec)\n", | |
" 1 0.000 0.000 0.000 0.000 :0(setprofile)\n", | |
" 200000 0.301 0.000 0.301 0.000 <ipython-input-5-1f90dd81715b>:1(relu)\n", | |
" 1 0.000 0.000 0.642 0.642 <ipython-input-5-1f90dd81715b>:4(test)\n", | |
" 1 0.341 0.341 0.642 0.642 <ipython-input-5-1f90dd81715b>:5(<listcomp>)\n", | |
" 1 0.003 0.003 0.644 0.644 <string>:1(<module>)\n", | |
" 0 0.000 0.000 profile:0(profiler)\n", | |
" 1 0.000 0.000 0.644 0.644 profile:0(test())\n", | |
"\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"# without jupyter notebook\n", | |
"import profile\n", | |
"profile.run('test()')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:29.851183Z", | |
"start_time": "2020-04-13T14:14:29.775567Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" 200005 function calls in 0.068 seconds\n", | |
"\n", | |
" Ordered by: internal time\n", | |
"\n", | |
" ncalls tottime percall cumtime percall filename:lineno(function)\n", | |
" 1 0.044 0.044 0.066 0.066 <ipython-input-5-1f90dd81715b>:5(<listcomp>)\n", | |
" 200000 0.022 0.000 0.022 0.000 <ipython-input-5-1f90dd81715b>:1(relu)\n", | |
" 1 0.002 0.002 0.068 0.068 <string>:1(<module>)\n", | |
" 1 0.000 0.000 0.068 0.068 {built-in method builtins.exec}\n", | |
" 1 0.000 0.000 0.066 0.066 <ipython-input-5-1f90dd81715b>:4(test)\n", | |
" 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", | |
" " | |
] | |
} | |
], | |
"source": [ | |
"%prun test()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 4. 行毎の実行時間測定" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:29.876325Z", | |
"start_time": "2020-04-13T14:14:29.857556Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# !pip install line_profiler\n", | |
"%load_ext line_profiler" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:30.155742Z", | |
"start_time": "2020-04-13T14:14:29.884883Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<line_profiler.line_profiler.LineProfiler at 0x1325b0440>" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Timer unit: 1e-06 s\n", | |
"\n", | |
"Total time: 0.076197 s\n", | |
"File: <ipython-input-5-1f90dd81715b>\n", | |
"Function: relu at line 1\n", | |
"\n", | |
"Line # Hits Time Per Hit % Time Line Contents\n", | |
"==============================================================\n", | |
" 1 def relu(x):\n", | |
" 2 200000 76197.0 0.4 100.0 return x if x > 0 else 0\n", | |
"\n", | |
"Total time: 0.238026 s\n", | |
"File: <ipython-input-5-1f90dd81715b>\n", | |
"Function: test at line 4\n", | |
"\n", | |
"Line # Hits Time Per Hit % Time Line Contents\n", | |
"==============================================================\n", | |
" 4 def test():\n", | |
" 5 1 238025.0 238025.0 100.0 result = [relu(x) for x in range(200000)]\n", | |
" 6 1 1.0 1.0 0.0 return result\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"# without jupyter notebook\n", | |
"import line_profiler\n", | |
"\n", | |
"lprofile = line_profiler.LineProfiler(test, relu)\n", | |
"lprofile.run('test()')\n", | |
"lprofile.print_stats()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:30.402235Z", | |
"start_time": "2020-04-13T14:14:30.158128Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Timer unit: 1e-06 s\n", | |
"\n", | |
"Total time: 0.075953 s\n", | |
"File: <ipython-input-5-1f90dd81715b>\n", | |
"Function: relu at line 1\n", | |
"\n", | |
"Line # Hits Time Per Hit % Time Line Contents\n", | |
"==============================================================\n", | |
" 1 def relu(x):\n", | |
" 2 200000 75953.0 0.4 100.0 return x if x > 0 else 0\n", | |
"\n", | |
"Total time: 0.23546 s\n", | |
"File: <ipython-input-5-1f90dd81715b>\n", | |
"Function: test at line 4\n", | |
"\n", | |
"Line # Hits Time Per Hit % Time Line Contents\n", | |
"==============================================================\n", | |
" 4 def test():\n", | |
" 5 1 235460.0 235460.0 100.0 result = [relu(x) for x in range(200000)]\n", | |
" 6 1 0.0 0.0 0.0 return result\n" | |
] | |
} | |
], | |
"source": [ | |
"%lprun -f test -f relu test()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 検索を早くする\n", | |
"多量のデータから必要なデータを探し出すのはよくある操作であり、データの量が多いとき時間がかかる操作でもある。\n", | |
"\n", | |
"### 5. `list` より `set`\n", | |
"データの準備" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:56.321850Z", | |
"start_time": "2020-04-13T14:14:30.404680Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import random\n", | |
"data = [i**2 for i in range(10000000)]\n", | |
"random.shuffle(data)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:14:57.288528Z", | |
"start_time": "2020-04-13T14:14:56.335654Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 307 ms, sys: 38 ms, total: 345 ms\n", | |
"Wall time: 876 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"list_data = list(data)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:15:06.832604Z", | |
"start_time": "2020-04-13T14:14:57.296651Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 3.94 s, sys: 361 ms, total: 4.3 s\n", | |
"Wall time: 9.48 s\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"set_data = set(data)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"`list` からデータを検索する場合" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:15:06.903239Z", | |
"start_time": "2020-04-13T14:15:06.867691Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"random.seed(0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:06.592225Z", | |
"start_time": "2020-04-13T14:15:06.908447Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"852 ms ± 206 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%%timeit -n 10\n", | |
"random.choice(data) in list_data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"`set` からデータを検索する場合" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:06.656258Z", | |
"start_time": "2020-04-13T14:16:06.611832Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"random.seed(0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:09.925495Z", | |
"start_time": "2020-04-13T14:16:06.658616Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"4.55 µs ± 2.6 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%%timeit -n 10\n", | |
"random.choice(data) in set_data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 6. `list` より `dict`\n", | |
"\n", | |
"データ準備" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:14.876826Z", | |
"start_time": "2020-04-13T14:16:09.929650Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"integers = [i for i in range(10000000)]\n", | |
"squares = [i * i for i in integers]\n", | |
"square_dict = {i: i * i for i in integers}" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"`list` を利用する場合" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:14.932412Z", | |
"start_time": "2020-04-13T14:16:14.893907Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"random.seed(0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:21.016209Z", | |
"start_time": "2020-04-13T14:16:14.945057Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"86.4 ms ± 14.8 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%%timeit -n 10\n", | |
"squares[integers.index(random.choice(integers))]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"`dict` を利用する場合" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:21.029814Z", | |
"start_time": "2020-04-13T14:16:21.023219Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"random.seed(0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:21.075572Z", | |
"start_time": "2020-04-13T14:16:21.042846Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"3.69 µs ± 977 ns per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%%timeit -n 10\n", | |
"square_dict[random.choice(integers)]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 繰り返し処理を早くする\n", | |
"### 7. `while` vs `for` vs 標準関数" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:21.534763Z", | |
"start_time": "2020-04-13T14:16:21.119381Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 246 ms, sys: 7.94 ms, total: 254 ms\n", | |
"Wall time: 388 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"499999500000" | |
] | |
}, | |
"execution_count": 23, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"i = 0\n", | |
"s = 0\n", | |
"while i < 1000000:\n", | |
" s += i\n", | |
" i += 1\n", | |
"s" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:21.732505Z", | |
"start_time": "2020-04-13T14:16:21.552758Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 133 ms, sys: 3.07 ms, total: 136 ms\n", | |
"Wall time: 146 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"499999500000" | |
] | |
}, | |
"execution_count": 24, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"s = 0\n", | |
"for i in range(1000000):\n", | |
" s += i\n", | |
"s" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:21.766849Z", | |
"start_time": "2020-04-13T14:16:21.734904Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 23 ms, sys: 323 µs, total: 23.4 ms\n", | |
"Wall time: 23.7 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"499999500000" | |
] | |
}, | |
"execution_count": 25, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"s = sum(range(1000000))\n", | |
"s" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 8. 計算結果を再利用する" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:21.783369Z", | |
"start_time": "2020-04-13T14:16:21.769914Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"some_list = [i * i for i in range(30000)]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:30.726785Z", | |
"start_time": "2020-04-13T14:16:21.785740Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 7.94 s, sys: 93.3 ms, total: 8.03 s\n", | |
"Wall time: 8.93 s\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"result = [i / sum(some_list) for i in some_list]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:30.740619Z", | |
"start_time": "2020-04-13T14:16:30.728980Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 2.91 ms, sys: 974 µs, total: 3.89 ms\n", | |
"Wall time: 4.11 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"total = sum(some_list)\n", | |
"result = [i / total for i in some_list]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 関数を早くする\n", | |
"### 9. 再帰より繰り返し" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:33.582872Z", | |
"start_time": "2020-04-13T14:16:30.744720Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 2.72 s, sys: 25.6 ms, total: 2.75 s\n", | |
"Wall time: 2.83 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"9227465" | |
] | |
}, | |
"execution_count": 29, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"def fib(n):\n", | |
" return 1 if n in (1, 2) else fib(n - 1) + fib(n - 2)\n", | |
"fib(35)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:33.597599Z", | |
"start_time": "2020-04-13T14:16:33.585639Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 36 µs, sys: 0 ns, total: 36 µs\n", | |
"Wall time: 42 µs\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"9227465" | |
] | |
}, | |
"execution_count": 30, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"def fib(n):\n", | |
" a, b = 1, 1\n", | |
" for i in range(n - 2):\n", | |
" a, b = b, a + b\n", | |
" return b\n", | |
"fib(35)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 10. キャッシュを利用する" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:36.725211Z", | |
"start_time": "2020-04-13T14:16:33.601240Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 2.84 s, sys: 30.3 ms, total: 2.87 s\n", | |
"Wall time: 3.12 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"9227465" | |
] | |
}, | |
"execution_count": 31, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"def fib(n):\n", | |
" return 1 if n in (1, 2) else fib(n - 1) + fib(n - 2)\n", | |
"fib(35)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:37.848083Z", | |
"start_time": "2020-04-13T14:16:36.728748Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 143 µs, sys: 1.08 ms, total: 1.23 ms\n", | |
"Wall time: 1.53 ms\n", | |
"Compiler : 806 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"9227465" | |
] | |
}, | |
"execution_count": 32, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"import functools\n", | |
"@functools.lru_cache(maxsize=50)\n", | |
"def fib(n):\n", | |
" return 1 if n in (1, 2) else fib(n - 1) + fib(n - 2)\n", | |
"fib(35)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 11. `numba`\n", | |
"> numpyと相性が良いが、pandasを利用するときは効果がない" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 33, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:16:53.174748Z", | |
"start_time": "2020-04-13T14:16:37.851164Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"219 ms ± 37.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%%timeit -n 10\n", | |
"def square(x):\n", | |
" return x * x\n", | |
"\n", | |
"def square_sum(n):\n", | |
" s = 0\n", | |
" for i in range(1, n + 1):\n", | |
" s += square(i)\n", | |
" return s\n", | |
"\n", | |
"square_sum(1000000)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 34, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:10.743690Z", | |
"start_time": "2020-04-13T14:16:53.181474Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"The slowest run took 7.24 times longer than the fastest. This could mean that an intermediate result is being cached.\n", | |
"160 ms ± 172 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" | |
] | |
} | |
], | |
"source": [ | |
"%%timeit -n 10\n", | |
"import numba\n", | |
"\n", | |
"@numba.jit\n", | |
"def square(x):\n", | |
" return x * x\n", | |
"\n", | |
"@numba.jit\n", | |
"def square_sum(n):\n", | |
" s = 0\n", | |
" for i in range(1, n + 1):\n", | |
" s += square(i)\n", | |
" return s\n", | |
"\n", | |
"square_sum(1000000)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 標準関数及びライブラリを利用する\n", | |
"### 12. `collections.Counter`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 35, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:12.724380Z", | |
"start_time": "2020-04-13T14:17:10.750540Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import collections\n", | |
"data = [x % 2020 for x in range(10000000)]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 36, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:15.847131Z", | |
"start_time": "2020-04-13T14:17:12.728670Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 2.94 s, sys: 40.3 ms, total: 2.98 s\n", | |
"Wall time: 3.11 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"4951" | |
] | |
}, | |
"execution_count": 36, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"count_values = {}\n", | |
"for i in data:\n", | |
" count = count_values.get(i, 0)\n", | |
" count_values[i] = count + 1\n", | |
"count_values[10]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 37, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:17.044684Z", | |
"start_time": "2020-04-13T14:17:15.850557Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 925 ms, sys: 25.7 ms, total: 950 ms\n", | |
"Wall time: 1.16 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"4951" | |
] | |
}, | |
"execution_count": 37, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"count_values = collections.Counter(data)\n", | |
"count_values[10]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 13. `collections.ChainMap` で `dict` の合併を早くする" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 38, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:19.745882Z", | |
"start_time": "2020-04-13T14:17:17.068220Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"dicts = [\n", | |
" {hex(i * 16 + j): f'v{i}-{j}' for i in range(100000)}\n", | |
" for j in range(16)\n", | |
"]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 39, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:20.792386Z", | |
"start_time": "2020-04-13T14:17:19.778021Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 521 ms, sys: 117 ms, total: 638 ms\n", | |
"Wall time: 1 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"1600000" | |
] | |
}, | |
"execution_count": 39, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"result = {}\n", | |
"for d in dicts:\n", | |
" result.update(d)\n", | |
"len(result)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 40, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:21.244556Z", | |
"start_time": "2020-04-13T14:17:20.807199Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 274 ms, sys: 55.6 ms, total: 330 ms\n", | |
"Wall time: 373 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"1600000" | |
] | |
}, | |
"execution_count": 40, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"result = collections.ChainMap(*dicts)\n", | |
"len(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## `numpy` を利用\n", | |
"### 14. `list` vs `np.array`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 41, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:21.413397Z", | |
"start_time": "2020-04-13T14:17:21.400902Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"N = 10000000" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 42, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:22.582443Z", | |
"start_time": "2020-04-13T14:17:21.417680Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 626 ms, sys: 69.8 ms, total: 696 ms\n", | |
"Wall time: 1.16 s\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"a = range(1, N, 3)\n", | |
"b = range(N, 1, -3)\n", | |
"result = [3 * aa - 2 * bb for aa, bb in zip(a, b)]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 43, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:22.754833Z", | |
"start_time": "2020-04-13T14:17:22.587234Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 77.2 ms, sys: 56.9 ms, total: 134 ms\n", | |
"Wall time: 161 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"a = np.arange(1, N, 3)\n", | |
"b = np.arange(N, 1, -3)\n", | |
"result = 3 * a - 2 * b" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 15. `np.ufunc()` vs `math.func()`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 44, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:22.763609Z", | |
"start_time": "2020-04-13T14:17:22.758585Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import math\n", | |
"N = 10000000" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 45, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:23.768837Z", | |
"start_time": "2020-04-13T14:17:22.766524Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 760 ms, sys: 75.5 ms, total: 835 ms\n", | |
"Wall time: 995 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"a = range(1, N, 3)\n", | |
"b = [math.log(x) for x in a]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 46, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:23.908758Z", | |
"start_time": "2020-04-13T14:17:23.772021Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 79.9 ms, sys: 31 ms, total: 111 ms\n", | |
"Wall time: 129 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"a = np.arange(1, N, 3)\n", | |
"b = np.log(a)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 16. `np.where` vs `if`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 47, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:23.948332Z", | |
"start_time": "2020-04-13T14:17:23.914150Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"a = np.arange(-1000000, 1000000)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 48, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:24.595519Z", | |
"start_time": "2020-04-13T14:17:23.951181Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 429 ms, sys: 64 ms, total: 493 ms\n", | |
"Wall time: 636 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"relu = np.vectorize(lambda x: x if x > 0 else 0)\n", | |
"result = relu(a)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 49, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:24.617328Z", | |
"start_time": "2020-04-13T14:17:24.598905Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 7.33 ms, sys: 4 ms, total: 11.3 ms\n", | |
"Wall time: 13.3 ms\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"relu = lambda x: np.where(x > 0, x, 0)\n", | |
"result = relu(a)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## pandasを早くする\n", | |
"### 17. `np.ufunc` vs `pd.apply` vs `pd.applymap`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 50, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:29.820401Z", | |
"start_time": "2020-04-13T14:17:24.620394Z" | |
} | |
}, | |
"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>a</th>\n", | |
" <th>b</th>\n", | |
" <th>c</th>\n", | |
" <th>d</th>\n", | |
" <th>e</th>\n", | |
" <th>f</th>\n", | |
" <th>g</th>\n", | |
" <th>h</th>\n", | |
" <th>i</th>\n", | |
" <th>j</th>\n", | |
" <th>...</th>\n", | |
" <th>q</th>\n", | |
" <th>r</th>\n", | |
" <th>s</th>\n", | |
" <th>t</th>\n", | |
" <th>u</th>\n", | |
" <th>v</th>\n", | |
" <th>w</th>\n", | |
" <th>x</th>\n", | |
" <th>y</th>\n", | |
" <th>z</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>0</td>\n", | |
" <td>-4</td>\n", | |
" <td>-7</td>\n", | |
" <td>4</td>\n", | |
" <td>-7</td>\n", | |
" <td>-9</td>\n", | |
" <td>2</td>\n", | |
" <td>-2</td>\n", | |
" <td>5</td>\n", | |
" <td>-9</td>\n", | |
" <td>9</td>\n", | |
" <td>...</td>\n", | |
" <td>-10</td>\n", | |
" <td>-10</td>\n", | |
" <td>3</td>\n", | |
" <td>-1</td>\n", | |
" <td>-6</td>\n", | |
" <td>-2</td>\n", | |
" <td>4</td>\n", | |
" <td>7</td>\n", | |
" <td>-1</td>\n", | |
" <td>-10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>-1</td>\n", | |
" <td>10</td>\n", | |
" <td>-1</td>\n", | |
" <td>-5</td>\n", | |
" <td>-8</td>\n", | |
" <td>2</td>\n", | |
" <td>8</td>\n", | |
" <td>7</td>\n", | |
" <td>-9</td>\n", | |
" <td>0</td>\n", | |
" <td>...</td>\n", | |
" <td>8</td>\n", | |
" <td>5</td>\n", | |
" <td>10</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>-9</td>\n", | |
" <td>9</td>\n", | |
" <td>1</td>\n", | |
" <td>7</td>\n", | |
" <td>-10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>-6</td>\n", | |
" <td>8</td>\n", | |
" <td>-6</td>\n", | |
" <td>4</td>\n", | |
" <td>7</td>\n", | |
" <td>2</td>\n", | |
" <td>-5</td>\n", | |
" <td>-5</td>\n", | |
" <td>-6</td>\n", | |
" <td>-8</td>\n", | |
" <td>...</td>\n", | |
" <td>-10</td>\n", | |
" <td>-1</td>\n", | |
" <td>4</td>\n", | |
" <td>-3</td>\n", | |
" <td>3</td>\n", | |
" <td>5</td>\n", | |
" <td>-9</td>\n", | |
" <td>6</td>\n", | |
" <td>8</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>-4</td>\n", | |
" <td>10</td>\n", | |
" <td>-2</td>\n", | |
" <td>-2</td>\n", | |
" <td>2</td>\n", | |
" <td>-4</td>\n", | |
" <td>-10</td>\n", | |
" <td>3</td>\n", | |
" <td>-7</td>\n", | |
" <td>10</td>\n", | |
" <td>...</td>\n", | |
" <td>-1</td>\n", | |
" <td>-7</td>\n", | |
" <td>-4</td>\n", | |
" <td>-1</td>\n", | |
" <td>-8</td>\n", | |
" <td>7</td>\n", | |
" <td>-7</td>\n", | |
" <td>8</td>\n", | |
" <td>10</td>\n", | |
" <td>9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>-3</td>\n", | |
" <td>-9</td>\n", | |
" <td>8</td>\n", | |
" <td>-5</td>\n", | |
" <td>-6</td>\n", | |
" <td>8</td>\n", | |
" <td>-2</td>\n", | |
" <td>-10</td>\n", | |
" <td>-2</td>\n", | |
" <td>-5</td>\n", | |
" <td>...</td>\n", | |
" <td>-5</td>\n", | |
" <td>-8</td>\n", | |
" <td>-6</td>\n", | |
" <td>6</td>\n", | |
" <td>8</td>\n", | |
" <td>3</td>\n", | |
" <td>-10</td>\n", | |
" <td>5</td>\n", | |
" <td>-7</td>\n", | |
" <td>9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99995</td>\n", | |
" <td>-2</td>\n", | |
" <td>1</td>\n", | |
" <td>-4</td>\n", | |
" <td>9</td>\n", | |
" <td>-3</td>\n", | |
" <td>-1</td>\n", | |
" <td>7</td>\n", | |
" <td>3</td>\n", | |
" <td>-9</td>\n", | |
" <td>-8</td>\n", | |
" <td>...</td>\n", | |
" <td>0</td>\n", | |
" <td>-10</td>\n", | |
" <td>-7</td>\n", | |
" <td>10</td>\n", | |
" <td>-2</td>\n", | |
" <td>4</td>\n", | |
" <td>-1</td>\n", | |
" <td>0</td>\n", | |
" <td>6</td>\n", | |
" <td>-4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99996</td>\n", | |
" <td>-8</td>\n", | |
" <td>9</td>\n", | |
" <td>10</td>\n", | |
" <td>-8</td>\n", | |
" <td>-6</td>\n", | |
" <td>8</td>\n", | |
" <td>-1</td>\n", | |
" <td>9</td>\n", | |
" <td>-5</td>\n", | |
" <td>-3</td>\n", | |
" <td>...</td>\n", | |
" <td>7</td>\n", | |
" <td>10</td>\n", | |
" <td>2</td>\n", | |
" <td>-10</td>\n", | |
" <td>-6</td>\n", | |
" <td>7</td>\n", | |
" <td>-7</td>\n", | |
" <td>-1</td>\n", | |
" <td>-6</td>\n", | |
" <td>-5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99997</td>\n", | |
" <td>-1</td>\n", | |
" <td>-10</td>\n", | |
" <td>7</td>\n", | |
" <td>-10</td>\n", | |
" <td>9</td>\n", | |
" <td>-6</td>\n", | |
" <td>-3</td>\n", | |
" <td>0</td>\n", | |
" <td>-4</td>\n", | |
" <td>-7</td>\n", | |
" <td>...</td>\n", | |
" <td>9</td>\n", | |
" <td>-6</td>\n", | |
" <td>7</td>\n", | |
" <td>-3</td>\n", | |
" <td>-5</td>\n", | |
" <td>-9</td>\n", | |
" <td>4</td>\n", | |
" <td>-8</td>\n", | |
" <td>0</td>\n", | |
" <td>-9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99998</td>\n", | |
" <td>-5</td>\n", | |
" <td>-5</td>\n", | |
" <td>4</td>\n", | |
" <td>-3</td>\n", | |
" <td>-9</td>\n", | |
" <td>-6</td>\n", | |
" <td>6</td>\n", | |
" <td>-3</td>\n", | |
" <td>-2</td>\n", | |
" <td>0</td>\n", | |
" <td>...</td>\n", | |
" <td>6</td>\n", | |
" <td>-3</td>\n", | |
" <td>-7</td>\n", | |
" <td>4</td>\n", | |
" <td>-9</td>\n", | |
" <td>-7</td>\n", | |
" <td>3</td>\n", | |
" <td>4</td>\n", | |
" <td>-5</td>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99999</td>\n", | |
" <td>0</td>\n", | |
" <td>5</td>\n", | |
" <td>4</td>\n", | |
" <td>4</td>\n", | |
" <td>5</td>\n", | |
" <td>-2</td>\n", | |
" <td>-9</td>\n", | |
" <td>-4</td>\n", | |
" <td>-4</td>\n", | |
" <td>10</td>\n", | |
" <td>...</td>\n", | |
" <td>2</td>\n", | |
" <td>1</td>\n", | |
" <td>-9</td>\n", | |
" <td>-2</td>\n", | |
" <td>-3</td>\n", | |
" <td>-1</td>\n", | |
" <td>-7</td>\n", | |
" <td>2</td>\n", | |
" <td>6</td>\n", | |
" <td>10</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>100000 rows × 26 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" a b c d e f g h i j ... q r s t u v w x \\\n", | |
"0 -4 -7 4 -7 -9 2 -2 5 -9 9 ... -10 -10 3 -1 -6 -2 4 7 \n", | |
"1 -1 10 -1 -5 -8 2 8 7 -9 0 ... 8 5 10 1 1 -9 9 1 \n", | |
"2 -6 8 -6 4 7 2 -5 -5 -6 -8 ... -10 -1 4 -3 3 5 -9 6 \n", | |
"3 -4 10 -2 -2 2 -4 -10 3 -7 10 ... -1 -7 -4 -1 -8 7 -7 8 \n", | |
"4 -3 -9 8 -5 -6 8 -2 -10 -2 -5 ... -5 -8 -6 6 8 3 -10 5 \n", | |
"... .. .. .. .. .. .. .. .. .. .. ... .. .. .. .. .. .. .. .. \n", | |
"99995 -2 1 -4 9 -3 -1 7 3 -9 -8 ... 0 -10 -7 10 -2 4 -1 0 \n", | |
"99996 -8 9 10 -8 -6 8 -1 9 -5 -3 ... 7 10 2 -10 -6 7 -7 -1 \n", | |
"99997 -1 -10 7 -10 9 -6 -3 0 -4 -7 ... 9 -6 7 -3 -5 -9 4 -8 \n", | |
"99998 -5 -5 4 -3 -9 -6 6 -3 -2 0 ... 6 -3 -7 4 -9 -7 3 4 \n", | |
"99999 0 5 4 4 5 -2 -9 -4 -4 10 ... 2 1 -9 -2 -3 -1 -7 2 \n", | |
"\n", | |
" y z \n", | |
"0 -1 -10 \n", | |
"1 7 -10 \n", | |
"2 8 3 \n", | |
"3 10 9 \n", | |
"4 -7 9 \n", | |
"... .. .. \n", | |
"99995 6 -4 \n", | |
"99996 -6 -5 \n", | |
"99997 0 -9 \n", | |
"99998 -5 2 \n", | |
"99999 6 10 \n", | |
"\n", | |
"[100000 rows x 26 columns]" | |
] | |
}, | |
"execution_count": 50, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"df = pd.DataFrame(np.random.randint(-10, 11, size=(100000, 26)), columns=[chr(c) for c in range(ord('a'), ord('z') + 1)])\n", | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 51, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:43.785942Z", | |
"start_time": "2020-04-13T14:17:29.825394Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 10.2 s, sys: 213 ms, total: 10.4 s\n", | |
"Wall time: 13.8 s\n" | |
] | |
}, | |
{ | |
"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>a</th>\n", | |
" <th>b</th>\n", | |
" <th>c</th>\n", | |
" <th>d</th>\n", | |
" <th>e</th>\n", | |
" <th>f</th>\n", | |
" <th>g</th>\n", | |
" <th>h</th>\n", | |
" <th>i</th>\n", | |
" <th>j</th>\n", | |
" <th>...</th>\n", | |
" <th>q</th>\n", | |
" <th>r</th>\n", | |
" <th>s</th>\n", | |
" <th>t</th>\n", | |
" <th>u</th>\n", | |
" <th>v</th>\n", | |
" <th>w</th>\n", | |
" <th>x</th>\n", | |
" <th>y</th>\n", | |
" <th>z</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>0</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.295050</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.295050</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.848872</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-0.499012</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>...</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.499012</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99995</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>...</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.103159</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99996</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>...</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.242586</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99997</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-1.323249</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99998</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>0.493151</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99999</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>...</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.383093</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>100000 rows × 26 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" a b c d e f g \\\n", | |
"0 0.103159 0.096916 -1.410446 0.096916 -1.323249 0.493151 -1.325444 \n", | |
"1 -0.301169 -1.383093 -0.301169 1.242586 -1.134858 0.493151 0.843858 \n", | |
"2 1.239586 0.843858 1.239586 -1.410446 1.410889 0.493151 1.242586 \n", | |
"3 0.103159 -1.383093 -1.325444 -1.325444 0.493151 0.103159 -0.295050 \n", | |
"4 -1.131113 -1.323249 0.843858 1.242586 1.239586 0.843858 -1.325444 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -1.325444 1.381773 0.103159 -0.499012 -1.131113 -0.301169 1.410889 \n", | |
"99996 -1.134858 -0.499012 -1.383093 -1.134858 1.239586 0.843858 -0.301169 \n", | |
"99997 -0.301169 -0.295050 1.410889 -0.295050 -0.499012 1.239586 -1.131113 \n", | |
"99998 1.242586 1.242586 -1.410446 -1.131113 -1.323249 1.239586 0.680755 \n", | |
"99999 1.000000 -0.675262 -1.410446 -1.410446 -0.675262 -1.325444 -1.323249 \n", | |
"\n", | |
" h i j ... q r s \\\n", | |
"0 -0.675262 -1.323249 -0.499012 ... -0.295050 -0.295050 -0.848872 \n", | |
"1 1.410889 -1.323249 1.000000 ... 0.843858 -0.675262 -1.383093 \n", | |
"2 1.242586 1.239586 -1.134858 ... -0.295050 -0.301169 -1.410446 \n", | |
"3 -0.848872 0.096916 -1.383093 ... -0.301169 0.096916 0.103159 \n", | |
"4 -0.295050 -1.325444 1.242586 ... 1.242586 -1.134858 1.239586 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -0.848872 -1.323249 -1.134858 ... 1.000000 -0.295050 0.096916 \n", | |
"99996 -0.499012 1.242586 -1.131113 ... 1.410889 -1.383093 0.493151 \n", | |
"99997 1.000000 0.103159 0.096916 ... -0.499012 1.239586 1.410889 \n", | |
"99998 -1.131113 -1.325444 1.000000 ... 0.680755 -1.131113 0.096916 \n", | |
"99999 0.103159 0.103159 -1.383093 ... 0.493151 1.381773 -1.323249 \n", | |
"\n", | |
" t u v w x y z \n", | |
"0 -0.301169 1.239586 -1.325444 -1.410446 1.410889 -0.301169 -0.295050 \n", | |
"1 1.381773 1.381773 -1.323249 -0.499012 1.381773 1.410889 -0.295050 \n", | |
"2 -1.131113 -0.848872 -0.675262 -1.323249 0.680755 0.843858 -0.848872 \n", | |
"3 -0.301169 -1.134858 1.410889 0.096916 0.843858 -1.383093 -0.499012 \n", | |
"4 0.680755 0.843858 -0.848872 -0.295050 -0.675262 0.096916 -0.499012 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -1.383093 -1.325444 -1.410446 -0.301169 1.000000 0.680755 0.103159 \n", | |
"99996 -0.295050 1.239586 1.410889 0.096916 -0.301169 1.239586 1.242586 \n", | |
"99997 -1.131113 1.242586 -1.323249 -1.410446 -1.134858 1.000000 -1.323249 \n", | |
"99998 -1.410446 -1.323249 0.096916 -0.848872 -1.410446 1.242586 0.493151 \n", | |
"99999 -1.325444 -1.131113 -0.301169 0.096916 0.493151 0.680755 -1.383093 \n", | |
"\n", | |
"[100000 rows x 26 columns]" | |
] | |
}, | |
"execution_count": 51, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"df.applymap(lambda x: np.sin(x) + np.cos(x))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 52, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:44.781178Z", | |
"start_time": "2020-04-13T14:17:43.823672Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 320 ms, sys: 63.6 ms, total: 383 ms\n", | |
"Wall time: 890 ms\n" | |
] | |
}, | |
{ | |
"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>a</th>\n", | |
" <th>b</th>\n", | |
" <th>c</th>\n", | |
" <th>d</th>\n", | |
" <th>e</th>\n", | |
" <th>f</th>\n", | |
" <th>g</th>\n", | |
" <th>h</th>\n", | |
" <th>i</th>\n", | |
" <th>j</th>\n", | |
" <th>...</th>\n", | |
" <th>q</th>\n", | |
" <th>r</th>\n", | |
" <th>s</th>\n", | |
" <th>t</th>\n", | |
" <th>u</th>\n", | |
" <th>v</th>\n", | |
" <th>w</th>\n", | |
" <th>x</th>\n", | |
" <th>y</th>\n", | |
" <th>z</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>0</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.295050</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.295050</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.848872</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-0.499012</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>...</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.499012</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99995</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>...</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.103159</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99996</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>...</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.242586</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99997</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-1.323249</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99998</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>0.493151</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99999</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>...</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.383093</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>100000 rows × 26 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" a b c d e f g \\\n", | |
"0 0.103159 0.096916 -1.410446 0.096916 -1.323249 0.493151 -1.325444 \n", | |
"1 -0.301169 -1.383093 -0.301169 1.242586 -1.134858 0.493151 0.843858 \n", | |
"2 1.239586 0.843858 1.239586 -1.410446 1.410889 0.493151 1.242586 \n", | |
"3 0.103159 -1.383093 -1.325444 -1.325444 0.493151 0.103159 -0.295050 \n", | |
"4 -1.131113 -1.323249 0.843858 1.242586 1.239586 0.843858 -1.325444 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -1.325444 1.381773 0.103159 -0.499012 -1.131113 -0.301169 1.410889 \n", | |
"99996 -1.134858 -0.499012 -1.383093 -1.134858 1.239586 0.843858 -0.301169 \n", | |
"99997 -0.301169 -0.295050 1.410889 -0.295050 -0.499012 1.239586 -1.131113 \n", | |
"99998 1.242586 1.242586 -1.410446 -1.131113 -1.323249 1.239586 0.680755 \n", | |
"99999 1.000000 -0.675262 -1.410446 -1.410446 -0.675262 -1.325444 -1.323249 \n", | |
"\n", | |
" h i j ... q r s \\\n", | |
"0 -0.675262 -1.323249 -0.499012 ... -0.295050 -0.295050 -0.848872 \n", | |
"1 1.410889 -1.323249 1.000000 ... 0.843858 -0.675262 -1.383093 \n", | |
"2 1.242586 1.239586 -1.134858 ... -0.295050 -0.301169 -1.410446 \n", | |
"3 -0.848872 0.096916 -1.383093 ... -0.301169 0.096916 0.103159 \n", | |
"4 -0.295050 -1.325444 1.242586 ... 1.242586 -1.134858 1.239586 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -0.848872 -1.323249 -1.134858 ... 1.000000 -0.295050 0.096916 \n", | |
"99996 -0.499012 1.242586 -1.131113 ... 1.410889 -1.383093 0.493151 \n", | |
"99997 1.000000 0.103159 0.096916 ... -0.499012 1.239586 1.410889 \n", | |
"99998 -1.131113 -1.325444 1.000000 ... 0.680755 -1.131113 0.096916 \n", | |
"99999 0.103159 0.103159 -1.383093 ... 0.493151 1.381773 -1.323249 \n", | |
"\n", | |
" t u v w x y z \n", | |
"0 -0.301169 1.239586 -1.325444 -1.410446 1.410889 -0.301169 -0.295050 \n", | |
"1 1.381773 1.381773 -1.323249 -0.499012 1.381773 1.410889 -0.295050 \n", | |
"2 -1.131113 -0.848872 -0.675262 -1.323249 0.680755 0.843858 -0.848872 \n", | |
"3 -0.301169 -1.134858 1.410889 0.096916 0.843858 -1.383093 -0.499012 \n", | |
"4 0.680755 0.843858 -0.848872 -0.295050 -0.675262 0.096916 -0.499012 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -1.383093 -1.325444 -1.410446 -0.301169 1.000000 0.680755 0.103159 \n", | |
"99996 -0.295050 1.239586 1.410889 0.096916 -0.301169 1.239586 1.242586 \n", | |
"99997 -1.131113 1.242586 -1.323249 -1.410446 -1.134858 1.000000 -1.323249 \n", | |
"99998 -1.410446 -1.323249 0.096916 -0.848872 -1.410446 1.242586 0.493151 \n", | |
"99999 -1.325444 -1.131113 -0.301169 0.096916 0.493151 0.680755 -1.383093 \n", | |
"\n", | |
"[100000 rows x 26 columns]" | |
] | |
}, | |
"execution_count": 52, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"df.apply(lambda x: np.sin(x) + np.cos(x))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 53, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:45.051539Z", | |
"start_time": "2020-04-13T14:17:44.786006Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 136 ms, sys: 37.7 ms, total: 173 ms\n", | |
"Wall time: 167 ms\n" | |
] | |
}, | |
{ | |
"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>a</th>\n", | |
" <th>b</th>\n", | |
" <th>c</th>\n", | |
" <th>d</th>\n", | |
" <th>e</th>\n", | |
" <th>f</th>\n", | |
" <th>g</th>\n", | |
" <th>h</th>\n", | |
" <th>i</th>\n", | |
" <th>j</th>\n", | |
" <th>...</th>\n", | |
" <th>q</th>\n", | |
" <th>r</th>\n", | |
" <th>s</th>\n", | |
" <th>t</th>\n", | |
" <th>u</th>\n", | |
" <th>v</th>\n", | |
" <th>w</th>\n", | |
" <th>x</th>\n", | |
" <th>y</th>\n", | |
" <th>z</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>0</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.295050</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.295050</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.848872</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-0.499012</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>...</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.499012</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99995</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>...</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>0.103159</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99996</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.843858</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>...</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.242586</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99997</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-0.295050</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>...</td>\n", | |
" <td>-0.499012</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>1.410889</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.134858</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-1.323249</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99998</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>1.239586</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>-0.848872</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>1.242586</td>\n", | |
" <td>0.493151</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>99999</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-1.410446</td>\n", | |
" <td>-0.675262</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>0.103159</td>\n", | |
" <td>-1.383093</td>\n", | |
" <td>...</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>1.381773</td>\n", | |
" <td>-1.323249</td>\n", | |
" <td>-1.325444</td>\n", | |
" <td>-1.131113</td>\n", | |
" <td>-0.301169</td>\n", | |
" <td>0.096916</td>\n", | |
" <td>0.493151</td>\n", | |
" <td>0.680755</td>\n", | |
" <td>-1.383093</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>100000 rows × 26 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" a b c d e f g \\\n", | |
"0 0.103159 0.096916 -1.410446 0.096916 -1.323249 0.493151 -1.325444 \n", | |
"1 -0.301169 -1.383093 -0.301169 1.242586 -1.134858 0.493151 0.843858 \n", | |
"2 1.239586 0.843858 1.239586 -1.410446 1.410889 0.493151 1.242586 \n", | |
"3 0.103159 -1.383093 -1.325444 -1.325444 0.493151 0.103159 -0.295050 \n", | |
"4 -1.131113 -1.323249 0.843858 1.242586 1.239586 0.843858 -1.325444 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -1.325444 1.381773 0.103159 -0.499012 -1.131113 -0.301169 1.410889 \n", | |
"99996 -1.134858 -0.499012 -1.383093 -1.134858 1.239586 0.843858 -0.301169 \n", | |
"99997 -0.301169 -0.295050 1.410889 -0.295050 -0.499012 1.239586 -1.131113 \n", | |
"99998 1.242586 1.242586 -1.410446 -1.131113 -1.323249 1.239586 0.680755 \n", | |
"99999 1.000000 -0.675262 -1.410446 -1.410446 -0.675262 -1.325444 -1.323249 \n", | |
"\n", | |
" h i j ... q r s \\\n", | |
"0 -0.675262 -1.323249 -0.499012 ... -0.295050 -0.295050 -0.848872 \n", | |
"1 1.410889 -1.323249 1.000000 ... 0.843858 -0.675262 -1.383093 \n", | |
"2 1.242586 1.239586 -1.134858 ... -0.295050 -0.301169 -1.410446 \n", | |
"3 -0.848872 0.096916 -1.383093 ... -0.301169 0.096916 0.103159 \n", | |
"4 -0.295050 -1.325444 1.242586 ... 1.242586 -1.134858 1.239586 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -0.848872 -1.323249 -1.134858 ... 1.000000 -0.295050 0.096916 \n", | |
"99996 -0.499012 1.242586 -1.131113 ... 1.410889 -1.383093 0.493151 \n", | |
"99997 1.000000 0.103159 0.096916 ... -0.499012 1.239586 1.410889 \n", | |
"99998 -1.131113 -1.325444 1.000000 ... 0.680755 -1.131113 0.096916 \n", | |
"99999 0.103159 0.103159 -1.383093 ... 0.493151 1.381773 -1.323249 \n", | |
"\n", | |
" t u v w x y z \n", | |
"0 -0.301169 1.239586 -1.325444 -1.410446 1.410889 -0.301169 -0.295050 \n", | |
"1 1.381773 1.381773 -1.323249 -0.499012 1.381773 1.410889 -0.295050 \n", | |
"2 -1.131113 -0.848872 -0.675262 -1.323249 0.680755 0.843858 -0.848872 \n", | |
"3 -0.301169 -1.134858 1.410889 0.096916 0.843858 -1.383093 -0.499012 \n", | |
"4 0.680755 0.843858 -0.848872 -0.295050 -0.675262 0.096916 -0.499012 \n", | |
"... ... ... ... ... ... ... ... \n", | |
"99995 -1.383093 -1.325444 -1.410446 -0.301169 1.000000 0.680755 0.103159 \n", | |
"99996 -0.295050 1.239586 1.410889 0.096916 -0.301169 1.239586 1.242586 \n", | |
"99997 -1.131113 1.242586 -1.323249 -1.410446 -1.134858 1.000000 -1.323249 \n", | |
"99998 -1.410446 -1.323249 0.096916 -0.848872 -1.410446 1.242586 0.493151 \n", | |
"99999 -1.325444 -1.131113 -0.301169 0.096916 0.493151 0.680755 -1.383093 \n", | |
"\n", | |
"[100000 rows x 26 columns]" | |
] | |
}, | |
"execution_count": 53, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"np.sin(df) + np.cos(df)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 18. サイズが分かる場合、最初のサイズを指定しておく" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 54, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:46.157393Z", | |
"start_time": "2020-04-13T14:17:45.057172Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 921 ms, sys: 28.2 ms, total: 949 ms\n", | |
"Wall time: 1.09 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"(1000, 26)" | |
] | |
}, | |
"execution_count": 54, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"df = pd.DataFrame(columns=[chr(c) for c in range(ord('a'), ord('z') + 1)])\n", | |
"for i in range(1000):\n", | |
" df.loc[i, :] = range(i, i + 26)\n", | |
"df.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 55, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:47.025882Z", | |
"start_time": "2020-04-13T14:17:46.170463Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 547 ms, sys: 19.3 ms, total: 566 ms\n", | |
"Wall time: 836 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"(1000, 26)" | |
] | |
}, | |
"execution_count": 55, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"df = pd.DataFrame(np.zeros((1000, 26)), columns=[chr(c) for c in range(ord('a'), ord('z') + 1)])\n", | |
"for i in range(1000):\n", | |
" df.loc[i, :] = range(i, i + 26)\n", | |
"df.shape" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 19. `pandarallel`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 56, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:17:51.835225Z", | |
"start_time": "2020-04-13T14:17:47.041652Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Requirement already satisfied: pandarallel in /Users/wangyuan@jp.ibm.com/.pyenv/versions/3.7.4/Python.framework/Versions/3.7/lib/python3.7/site-packages (1.4.2)\r\n", | |
"Requirement already satisfied: dill in /Users/wangyuan@jp.ibm.com/.pyenv/versions/3.7.4/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandarallel) (0.3.1.1)\r\n" | |
] | |
} | |
], | |
"source": [ | |
"!pip install pandarallel\n", | |
"import pandarallel\n", | |
"import os\n", | |
"df = pd.DataFrame(np.random.randint(-10, 11, size=(100000, 26)), columns=[chr(c) for c in range(ord('a'), ord('z') + 1)])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 57, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:18:09.012535Z", | |
"start_time": "2020-04-13T14:17:51.838322Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 13.4 s, sys: 274 ms, total: 13.7 s\n", | |
"Wall time: 17.2 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"0 13\n", | |
"1 -62\n", | |
"2 10\n", | |
"3 75\n", | |
"4 -43\n", | |
" ..\n", | |
"99995 -16\n", | |
"99996 40\n", | |
"99997 12\n", | |
"99998 -56\n", | |
"99999 -27\n", | |
"Length: 100000, dtype: int64" | |
] | |
}, | |
"execution_count": 57, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"df.apply(np.sum, axis=1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 58, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:18:19.235336Z", | |
"start_time": "2020-04-13T14:18:09.018697Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"INFO: Pandarallel will run on 4 workers.\n", | |
"INFO: Pandarallel will use standard multiprocessing data tranfer (pipe) to transfer data between the main process and workers.\n", | |
"CPU times: user 58.5 ms, sys: 124 ms, total: 183 ms\n", | |
"Wall time: 10.2 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"0 13\n", | |
"1 -62\n", | |
"2 10\n", | |
"3 75\n", | |
"4 -43\n", | |
" ..\n", | |
"99995 -16\n", | |
"99996 40\n", | |
"99997 12\n", | |
"99998 -56\n", | |
"99999 -27\n", | |
"Length: 100000, dtype: int64" | |
] | |
}, | |
"execution_count": 58, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"pandarallel.pandarallel.initialize(nb_workers=os.cpu_count())\n", | |
"df.parallel_apply(np.sum, axis=1)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 20. マルチプロセス" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 59, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:18:19.252933Z", | |
"start_time": "2020-04-13T14:18:19.242260Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"def busy(n):\n", | |
" for _ in range(10000000):\n", | |
" n * n\n", | |
" return n * n\n", | |
"\n", | |
"import multiprocessing" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 60, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:18:26.281798Z", | |
"start_time": "2020-04-13T14:18:19.255377Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 5.51 s, sys: 71.8 ms, total: 5.59 s\n", | |
"Wall time: 6.99 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" | |
] | |
}, | |
"execution_count": 60, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"result = [busy(i) for i in range(10)]\n", | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 61, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:18:29.559854Z", | |
"start_time": "2020-04-13T14:18:26.285567Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 11.7 ms, sys: 51.9 ms, total: 63.6 ms\n", | |
"Wall time: 3.26 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" | |
] | |
}, | |
"execution_count": 61, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"with multiprocessing.Pool(os.cpu_count()) as pool:\n", | |
" result = pool.map(busy, range(10))\n", | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 21. マルチスレッド" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 62, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:18:29.578313Z", | |
"start_time": "2020-04-13T14:18:29.571642Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import time\n", | |
"def io_busy(n):\n", | |
" time.sleep(5)\n", | |
" return n * n\n", | |
"\n", | |
"import multiprocessing.pool" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 63, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:18:49.613028Z", | |
"start_time": "2020-04-13T14:18:29.585748Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 1.82 ms, sys: 2.51 ms, total: 4.33 ms\n", | |
"Wall time: 20 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"[0, 1, 4, 9]" | |
] | |
}, | |
"execution_count": 63, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"result = [io_busy(i) for i in range(4)]\n", | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 64, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:18:54.719191Z", | |
"start_time": "2020-04-13T14:18:49.617393Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 8.59 ms, sys: 9.5 ms, total: 18.1 ms\n", | |
"Wall time: 5.09 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"[0, 1, 4, 9]" | |
] | |
}, | |
"execution_count": 64, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"with multiprocessing.pool.ThreadPool(os.cpu_count()) as pool:\n", | |
" result = pool.map(io_busy, range(4))\n", | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"PythonのマルチスレッドはCPUたくさん使う処理を並行する場合、パフォーマンスの改善はほとんどない。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 65, | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2020-04-13T14:19:00.923373Z", | |
"start_time": "2020-04-13T14:18:54.727288Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 5.11 s, sys: 92.1 ms, total: 5.2 s\n", | |
"Wall time: 6.18 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" | |
] | |
}, | |
"execution_count": 65, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"with multiprocessing.pool.ThreadPool(os.cpu_count()) as pool:\n", | |
" result = pool.map(busy, range(10))\n", | |
"result" | |
] | |
} | |
], | |
"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.4" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment