Last active
July 30, 2022 00:10
-
-
Save zed/a66866c01beab98ce1228138b4c439f4 to your computer and use it in GitHub Desktop.
Performance - generate n random digits.ipynb
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": [ | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "# define functions that generate random string using the alphabet\nimport random\nimport string\nfrom itertools import cycle, islice\n\ndef generate_random_string(n, alphabet=string.digits, choice=random.choice):\n return ''.join([choice(alphabet) for _ in range(n)])\n\n\ndef make_random_generator(alphabet=string.digits, getrandbits=random.getrandbits):\n letters = alphabet.encode('ascii')\n nbytes = 256 \n naligned = nbytes - nbytes % len(letters)\n table = bytes.maketrans(bytes(range(naligned)),\n bytes(islice(cycle(letters), naligned)))\n bytes2delete = bytes(range(naligned, nbytes))\n def generate(n):\n L = []\n while n > 0:\n chunk = getrandbits(8*n).to_bytes(n, 'big').translate(table, bytes2delete)\n n -= len(chunk)\n L.append(chunk)\n return b''.join(L).decode('ascii')\n return generate\n\ngenerate_random_string_tr = make_random_generator()\ngenerate_random_string_tr.__name__ = 'generate_random_string_tr'", | |
"execution_count": 1, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "%timeit generate_random_string(32)", | |
"execution_count": 2, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": "46.4 µs ± 1.7 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "%timeit generate_random_string_tr(32)", | |
"execution_count": 3, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": "3.44 µs ± 34.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "import reporttime # https://gist.github.com/zed/4276624#file-reporttime-py\n\nfuncs = [generate_random_string, generate_random_string_tr]\nfor n in [5, 10, 20]:\n reporttime.measure(funcs, args=[1<<n])", | |
"execution_count": 4, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": "name time ratio comment\ngenerate_random_string_tr 3.7 usec 1.00 [32]\ngenerate_random_string 45.9 usec 12.40 [32]\nname time ratio comment\ngenerate_random_string_tr 13.8 usec 1.00 [1024]\ngenerate_random_string 1.43 msec 103.57 [1024]\nname time ratio comment\ngenerate_random_string_tr 8.21 msec 1.00 [1048576]\ngenerate_random_string 1.44 sec 174.99 [1048576]\n" | |
} | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3", | |
"language": "python" | |
}, | |
"language_info": { | |
"name": "python", | |
"version": "3.6.3", | |
"mimetype": "text/x-python", | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"pygments_lexer": "ipython3", | |
"nbconvert_exporter": "python", | |
"file_extension": ".py" | |
}, | |
"gist": { | |
"id": "a66866c01beab98ce1228138b4c439f4", | |
"data": { | |
"description": "Performance - generate n random digits.ipynb", | |
"public": true | |
} | |
}, | |
"_draft": { | |
"nbviewer_url": "https://gist.github.com/a66866c01beab98ce1228138b4c439f4" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment