Skip to content

Instantly share code, notes, and snippets.

@ArpegiusWhooves
Created October 22, 2019 14:29
Show Gist options
  • Save ArpegiusWhooves/7010f2b22f1585f26095ab9696ce0d80 to your computer and use it in GitHub Desktop.
Save ArpegiusWhooves/7010f2b22f1585f26095ab9696ce0d80 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
" %config IPCompleter.greedy=True"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"import numpy as np\n",
"import math\n",
"import timeit\n",
"import perfplot"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def genMatrixBynumpyOperation(X):\n",
" w=np.arange(1,X+1)[:,np.newaxis]\n",
" k=np.arange(1,X+1)[np.newaxis,:]\n",
" return np.log2(w + k*k) / (w+1)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def genMatrixForLoop(X):\n",
" A = np.zeros((X,X),float)\n",
" for x in range(X):\n",
" for y in range(X):\n",
" w = x+1\n",
" k = y+1\n",
" A[x,y] = math.log2(w + k*k) / (w+1)\n",
" return A"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def genMatrixFunction(w,k):\n",
" w += 1\n",
" k += 1\n",
" return np.log2(w+k*k)/(w+1)\n",
"def genMatrixFromFunction(X):\n",
" return np.fromfunction(genMatrixFunction,(X,X), dtype = float)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"benchmark= perfplot.bench(\n",
" setup=lambda n: int(n**0.5), # or simply setup=numpy.random.rand\n",
" kernels=[\n",
" genMatrixBynumpyOperation,\n",
" genMatrixForLoop,\n",
" genMatrixFromFunction\n",
" ],\n",
" labels=[\"genMatrixBynumpyOperation\", \"genMatrixForLoop\", \"genMatrixFromFunction\"],\n",
" n_range=[int((20*1.04**x-20))**2 for x in range(1,50)],\n",
" xlabel=\"shape=(X,X)\",\n",
" # More optional arguments with their default values:\n",
" # title=None,\n",
" logx=True,\n",
" logy=True,\n",
" # equality_check=numpy.allclose, # set to None to disable \"correctness\" assertion\n",
" # automatic_order=True,\n",
" # colors=None,\n",
" # target_time_per_measurement=1.0,\n",
" # time_unit=\"auto\" # set to one of (\"s\", \"ms\", \"us\", or \"ns\") to force plot units\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEKCAYAAAAMzhLIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3gU1frA8e/sZtN7AsEQIIUSIIUSukiTovQmKkpTUbHcoiLXcu0iCvqzggiKKBcEkSoWREKVXoUACSRIIEAKCWmbbDm/PyZZA6QRstlkcz7Pk2ezszszb4Zl3j1zznlHEUIgSZIkSWXR2DoASZIkqXaTiUKSJEkql0wUkiRJUrlkopAkSZLKJROFJEmSVC6ZKCRJkqRyOdg6AGvw9/cXwcHBVVo3NzcXNze36g3IDsnjVDnyOFVMHqPKqYnjtH///jQhRIPrl9tVolAUZSgwtHnz5uzbt69K24iNjaV3797VGpc9ksepcuRxqpg8RpVTE8dJUZSzpS23q0tPQoh1QoipXl5etg5FkiTJbthVopAkSZKqn0wUkiRJUrnsto/iegaDgeTkZPR6fbnb8PLyIi4uzkoR2g95nCrH2sfJ2dmZoKAgdDqd1fYhSXaVKIQQ64B1MTExj1z/WnJyMh4eHgQHB6MoSpnbyM7OxsPDw5ph2gV5nCrHmsdJCEF6ejrJycmEhIRYZR+SBPXo0pNer8fPz6/cJCFJdYmiKPj5+VXYSpakW1VvEgUgk4Rkd+RnWrIwm+DQUjCbq33T9SpR2IOkpCQUReHll1+2LEtLS0On0/Hkk0+Wu25sbCw7d+4s8/W1a9fyzjvvlLuNSZMmERISQo8ePWjXrh0fffTRTcXfu3fvKs9xkSSpDIV5sHwCrH4M4n+p9s3bVR9FeZ3Z9iQ0NJT169fzxhtvALBixQratm1b4XqxsbG4u7vTvXv3G14zGo0MGzaMYcOGVbid9957j4EDB970tXeTyXRT75ckqRJy0+B/4+D8fhg0C1rdVe27sKsWRW2fcPfGG28QHh5O//79ue+++5g9ezanT59m0KBBdOzYkZ49e3LixAlA/eb+9NNP0717d0JDQ/n+++8t23FxcaF169aWb+bfffcd99xzj+X1devW0aVLF9q3b8+dd97JpUuXSEpKYt68eXzwwQe0a9eObdu2MWnSJP7973/Tp08fnn/+eRYtWmRplQwfPpzFixcD8PnnnzN+/Phy/7alS5cSGRlJREQEzz//vGW5u7s7//3vf+nSpQt//PFHqevq9XomT55MZGQk7du3Z/PmzeUuX7RoEcOHD2fQoEG0atWK11577ab+HSTJLggBcevhi75w6U8Y9w10fcwqu7KrFkWl/TQDLh4t9SUXkxG0VTgsjSLhrrIv2+zbt4+VK1dy8OBBjEYjHTp0oGPHjkydOpV58+bRokULdu/ezbRp0/j9998BSElJYfv27Zw4cYJhw4YxZswYy/buvfdeli1bRqNGjdBqtQQGBnLhwgUAbr/9dnbt2oWiKCxYsIB3332XOXPm8Nhjj+Hu7s6zzz4LwMKFCzl16hS//fYbWq2WRYsWWbY/f/58evToQUhICHPmzGHXrl2W15577jlef/11NBoN33zzDX5+fjz//PPs378fHx8fBgwYwOrVqxkxYgS5ublERETw+uuvl3lsPv30UwCOHj3KiRMnGDBgAKdOnSpzOcCePXv4888/cXV1pVOnTgwePJiYmJib+ReTpLrr7B+w8b+QvAf8W8KkHyHIep//+pkobGD79u0MHz4cFxcXAIYOHYper2fnzp2MHTvW8r6CggLL7yNGjECj0dCmTRsuXbp0zfYGDRrEyy+/TEBAAOPGjbvmteTkZMaNG0dKSgqFhYXlDp0cO3YsWq32huUBAQG8/vrr9OnTh1WrVuHr62t57fpLT2vWrKF37940aKDWEhs/fjxbt25lxIgRaLVaRo8eXeGxeeqppwAIDw+nWbNmnDp1qszlAP3798fPzw+AUaNGsX37dpkoJPtn0MOm12DXZ+BxGwz9CNqNr9qX25tQPxNFOd/886007l0IccMys9mMt7c3hw4dKnUdJyenMtd3dHSkY8eOzJkzh2PHjrFu3TrLa0899RT//ve/GTZsGLGxsbz66qtlxlVeNcqjR4/i5+dnaamUpbS/rZizs3Opiagy65e33etH+8jRP5K9c839Cxa8qF5m6jwV7nwNHF1rZN921UdRm91+++2sW7cOvV5PTk4OP/74I66uroSEhLBixQpAPTEePny40tt85plnmDVrluWbdbGsrCwaN24MwNdff21Z7uHhQXZ2dqW2vWfPHn766ScOHjzI7NmzSUxMLPO9Xbp0YcuWLaSlpWEymVi6dCm9evWq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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"benchmark.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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