Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.55524998, 0.42394212, 0.01200076, 0.13974612, 0.74289723,\n",
" 0.19072088, 0.47061846, 0.61921186, 0.96994115, 0.44076614,\n",
" 0.04326316, 0.33698309, 0.47978816, 0.00819107, 0.63463167,\n",
" 0.03370001, 0.0369827 , 0.84651929, 0.25335235, 0.75172228])"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import cupy as cp\n",
"from cupyx.scipy.special import erfinv\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from scipy.special import erfinv as sp_erfinv\n",
"\n",
"x_gpu = cp.random.rand(20) # input array\n",
"x_cpu = cp.asnumpy(x_gpu)\n",
"x_gpu"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[13 9 1 5 16 6 11 14 19 10 4 8 12 0 15 2 3 18 7 17]\n",
"[13 9 1 5 16 6 11 14 19 10 4 8 12 0 15 2 3 18 7 17]\n"
]
}
],
"source": [
"r_gpu = x_gpu.argsort().argsort() # compute the rank\n",
"print(r_gpu)\n",
"\n",
"r_cpu = x_cpu.argsort().argsort() \n",
"print(r_cpu)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.36842105 -0.05263158 -0.89473684 -0.47368421 0.68421053 -0.36842105\n",
" 0.15789474 0.47368421 0.999999 0.05263158 -0.57894737 -0.15789474\n",
" 0.26315789 -0.999999 0.57894737 -0.78947368 -0.68421053 0.89473684\n",
" -0.26315789 0.78947368]\n",
"[ 0.36842105 -0.05263158 -0.89473684 -0.47368421 0.68421053 -0.36842105\n",
" 0.15789474 0.47368421 0.999999 0.05263158 -0.57894737 -0.15789474\n",
" 0.26315789 -0.999999 0.57894737 -0.78947368 -0.68421053 0.89473684\n",
" -0.26315789 0.78947368]\n"
]
}
],
"source": [
"r_gpu = (r_gpu/r_gpu.max()-0.5)*2 # scale to (-1,1)\n",
"epsilon = 1e-6\n",
"r_gpu = cp.clip(r_gpu,-1+epsilon,1-epsilon)\n",
"print(r_gpu)\n",
"\n",
"r_cpu = (r_cpu/r_cpu.max()-0.5)*2 # scale to (-1,1)\n",
"r_cpu = cp.clip(r_cpu,-1+epsilon,1-epsilon)\n",
"print(r_cpu)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.3390617 -0.0466774 -1.14541135 -0.44805114 0.70933273 -0.3390617\n",
" 0.14085661 0.44805114 3.45891074 0.0466774 -0.56893556 -0.14085661\n",
" 0.23761485 -3.45891074 0.56893556 -0.8853822 -0.70933273 1.14541135\n",
" -0.23761485 0.8853822 ]\n",
"[ 0.3390617 -0.0466774 -1.14541135 -0.44805114 0.70933273 -0.3390617\n",
" 0.14085661 0.44805114 3.45891074 0.0466774 -0.56893556 -0.14085661\n",
" 0.23761485 -3.45891074 0.56893556 -0.8853822 -0.70933273 1.14541135\n",
" -0.23761485 0.8853822 ]\n"
]
}
],
"source": [
"r_gpu = erfinv(r_gpu) # map to gaussian\n",
"print(r_gpu)\n",
"\n",
"r_cpu = sp_erfinv(r_cpu) # map to gaussian\n",
"print(r_cpu)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"GaussRank transformation\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"n_bins = 5\n",
"fig, axs = plt.subplots(1, 2, sharey=True, tight_layout=True)\n",
"fig.set_figheight(5)\n",
"fig.set_figwidth(15)\n",
"axs[0].hist(cp.asnumpy(x_gpu), bins=n_bins)\n",
"axs[0].set_title('input',fontsize=15)\n",
"axs[1].hist(cp.asnumpy(r_gpu), bins=n_bins)\n",
"axs[1].set_title('transform',fontsize=15)\n",
"print('GaussRank transformation GPU')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"GaussRank transformation CPU\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"n_bins = 5\n",
"fig, axs = plt.subplots(1, 2, sharey=True, tight_layout=True)\n",
"fig.set_figheight(5)\n",
"fig.set_figwidth(15)\n",
"axs[0].hist(x_cpu, bins=n_bins)\n",
"axs[0].set_title('input',fontsize=15)\n",
"axs[1].hist(r_cpu, bins=n_bins)\n",
"axs[1].set_title('transform',fontsize=15)\n",
"print('GaussRank transformation CPU')"
]
}
],
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment