Skip to content

Instantly share code, notes, and snippets.

@zed
Last active July 30, 2022 00:10
Show Gist options
  • Save zed/a66866c01beab98ce1228138b4c439f4 to your computer and use it in GitHub Desktop.
Save zed/a66866c01beab98ce1228138b4c439f4 to your computer and use it in GitHub Desktop.
Performance - generate n random digits.ipynb
Display the source blob
Display the rendered blob
Raw
{
"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