Skip to content

Instantly share code, notes, and snippets.

@plammens
Last active August 3, 2020 15:33
Show Gist options
  • Save plammens/d5add6f9451754cd12085dfebd7e9075 to your computer and use it in GitHub Desktop.
Save plammens/d5add6f9451754cd12085dfebd7e9075 to your computer and use it in GitHub Desktop.
Benchmark for methods for creating a random mask in numpy
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"arr = np.arange(100_000)\n",
"rng1 = np.random.default_rng(123)\n",
"rng2 = np.random.default_rng(123)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def subset_with_boolean_mask_shuffle(mask_size):\n",
" mask = np.concatenate([np.ones(mask_size, dtype=bool), np.zeros(len(arr) - mask_size, dtype=bool)])\n",
" rng1.shuffle(mask)\n",
" return arr[mask]\n",
"\n",
"\n",
"def subset_with_int_mask_sort(mask_size):\n",
" m = rng2.choice(len(arr), replace=False, size=mask_size)\n",
" m.sort()\n",
" return arr[m]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([21201, 22803, 24746, 31448, 44969, 56005, 60478, 73845, 89322,\n",
" 99982])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"subset_with_boolean_mask_shuffle(10)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1543, 5381, 17590, 18436, 22035, 25508, 33361, 59290, 68229,\n",
" 90904])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"subset_with_int_mask_sort(10)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# assert that the order is preserved\n",
"assert np.all((a := subset_with_boolean_mask_shuffle(100))[:-1] < a[1:])\n",
"assert np.all((a := subset_with_int_mask_sort(100))[:-1] < a[1:])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import perfplot\n",
"\n",
"benchmarks = perfplot.bench(\n",
" setup=lambda n: n,\n",
" kernels=[\n",
" subset_with_boolean_mask_shuffle,\n",
" subset_with_int_mask_sort,\n",
" ],\n",
" labels=[\n",
" \"boolean array + shuffle\",\n",
" \"integer mask + sort\",\n",
" ],\n",
" n_range=range(1, len(arr), len(arr)//100),\n",
" xlabel=\"mask size\",\n",
" equality_check=None,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "dark"
},
"output_type": "display_data"
}
],
"source": [
"benchmarks.show()"
]
}
],
"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.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment