Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anujonthemove/19126373ef423de6d7feba526958b452 to your computer and use it in GitHub Desktop.
Save anujonthemove/19126373ef423de6d7feba526958b452 to your computer and use it in GitHub Desktop.
Triple For Loop Vectorization using Numpy
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "8157a30f",
"metadata": {},
"source": [
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "24767758",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from IPython.display import Image\n",
"import time\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('seaborn-poster')"
]
},
{
"cell_type": "markdown",
"id": "95f8dba2",
"metadata": {},
"source": [
"## Set a fixed random seed value"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "76d7486c",
"metadata": {},
"outputs": [],
"source": [
"seed = np.random.seed(1)"
]
},
{
"cell_type": "markdown",
"id": "98f1316f",
"metadata": {},
"source": [
"## Question-3"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "117a769d",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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qTR49CgV1tZGMDGR5hr7yyH9r+97vZ+oqFSEhyfDxaUybG2zVxe4cOEJevTYDRMTPTx8ODrH6I/sef4aJCamIywsGVWqGMHevhKkUlGO782rYzTw91+DefO+x/TpvvjmG9882yUmJuLu3XA0bOgMS0tLaDQabV0BsVico6DlqVOnMWDAIPTq1QMbN/5W4BKVarVae77ijDohIiIieteJRGIYG1uUdRilggkBIqJiWrHiX8ybdx6TJjWBu3tNJCSk49dfb+Dq1QRMnNgEixa1KbG+1Go1AgK2w8/vJ4hEYowd+ylGjMg5xaCwLly4iGXLVuLu3XB4ePTGV19NRuXKlUssXiIiIqL3HRMC7yEmBIjobXmZEBCE7JEDL4fT16xpir//7o9atcxKvE+VSoUTJ07h6dOnuQ7/L6xTp04jKuoBPDz6wMLCvMCRAUREREQVDRMC7yEmBIjobYmOfoHjx6Nx//5zpKZmwsBAjLp1zdG7t0OR6yQQERER0buBCYH3EBMCRFQWNBoUuUYDEREREb17ynNCoGTXOCMiquCYDCAiIiKi9wUTAkREREREREQVEBMCRERERERERBUQEwJEREREREREFRATAkREREREREQVEBMCRERERERERBUQEwJEREREREREFRATAkREREREREQVEBMCRERERERERBUQEwJEREREREREFRATAkREREREREQVkKSsAyCi0nXmzDls3rwVANC9e1d4evbLtd2PP65EREQkPv98DBo3dn2bIeYwYcJkqFQq7WszM1NMm/YVrK0r52j74sULTJs2A2KxBGvWrCqVeGJiYrFihR9MTU0wZcpkVKpkprP/33+vY92633S2ubg0woQJ40olnnfR3bthOHEiGEOG+MDMzKzgA/KRmZkFP7/ViIy8r7N91qxvUKNG9Rzts7KysGTJMsTHJ8DXdwrs7WsVq3+NRoO1a9fhxo2bMDExwY8/LsmzbUjIDaxduy7Hdj+/5dDX1y9WHCVh7dp1CAm5obPtiy8mokGD+nke88cfm3Dx4iV4ew+Au3unYvW/ZUsATp8+AwMDA8yePRNWVpb5tn/w4CH8/H5CRkaGzvaVK5fB0NBQZ1tIyA3cvRsGD48+OfYRERFR4XCEAFE5JwgCEhOfYvv2XTluDF539OgJbN0aiMePY95idLkLCNiB6OgYCILw/z8iCELubeVy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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 3,
"metadata": {
"image/png": {
"height": 400,
"width": 800
}
},
"output_type": "execute_result"
}
],
"source": [
"Image(filename=\"question-3.png\", width=800, height=400)"
]
},
{
"cell_type": "markdown",
"id": "93e1bb81",
"metadata": {},
"source": [
"## Prepare sample data and parameters"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b9c65195",
"metadata": {},
"outputs": [],
"source": [
"def prepare_data(n=40, m=20, d=10):\n",
" x = np.random.random((n, d))\n",
" y = np.random.random((m, d))\n",
" \n",
" return x, y"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "9a7a31ac",
"metadata": {},
"outputs": [],
"source": [
"x, y = prepare_data()"
]
},
{
"cell_type": "markdown",
"id": "df17de52",
"metadata": {},
"source": [
"## Non-vectorized version"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ab94ab54",
"metadata": {},
"outputs": [],
"source": [
"def non_vect(x, y):\n",
" n, d = x.shape\n",
" m, d = y.shape\n",
"\n",
" dist = np.zeros((n, m))\n",
"\n",
" for i in range(n):\n",
" for j in range(m):\n",
" for k in range(d):\n",
" dist[i, j] += (x[i, k]-y[j, k])**2\n",
" \n",
" return dist"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c2a8000b",
"metadata": {},
"outputs": [],
"source": [
"dist = non_vect(x, y)"
]
},
{
"cell_type": "markdown",
"id": "142537dc",
"metadata": {},
"source": [
"## Vectorized version"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9ab25966",
"metadata": {},
"outputs": [],
"source": [
"def vect(x, y):\n",
" n, d = x.shape\n",
" m, d = y.shape\n",
"\n",
" dist = np.zeros((n, m))\n",
"\n",
"\n",
" # (a-b)^2 = a.a + b.b -2.a.b\n",
" outer_sum = np.add.outer(np.sum(x**2, axis=1), np.sum(y**2, axis=1))\n",
" dot = np.dot(x, y.T)\n",
" dist_vect = outer_sum-2*dot\n",
" \n",
" return dist_vect"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "7804c618",
"metadata": {},
"outputs": [],
"source": [
"dist_vect = vect(x, y)"
]
},
{
"cell_type": "markdown",
"id": "a949408d",
"metadata": {},
"source": [
"## Sanity check"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "683622a4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True],\n",
" [ True, True, True, True, True, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True,\n",
" True, True]])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.round(dist) == np.round(dist_vect)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "6d04dcde",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1.41955323, 1.98101687, 0.87642126, 1.78343095, 3.13706926,\n",
" 2.76364802, 1.32885283, 1.94804486, 1.07880429, 2.17135445,\n",
" 1.38672904, 0.98271682, 1.80899097, 2.96186637, 1.03064516,\n",
" 1.20478187, 2.30461646, 1.51181796, 2.00459542, 0.91144179]])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dist[0:1]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "ee9df3ee",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1.41955323, 1.98101687, 0.87642126, 1.78343095, 3.13706926,\n",
" 2.76364802, 1.32885283, 1.94804486, 1.07880429, 2.17135445,\n",
" 1.38672904, 0.98271682, 1.80899097, 2.96186637, 1.03064516,\n",
" 1.20478187, 2.30461646, 1.51181796, 2.00459542, 0.91144179]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dist_vect[0:1]"
]
},
{
"cell_type": "markdown",
"id": "19ba1640",
"metadata": {},
"source": [
"## Benchmarking"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "5236d30c",
"metadata": {},
"outputs": [],
"source": [
"UPTO_POWER_OF_TWO = 10"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "d25a915b",
"metadata": {},
"outputs": [],
"source": [
"def benchmark(upto, function):\n",
" \n",
" benchmark_dict = {}\n",
" \n",
" for i in range(1, upto):\n",
" \n",
" data_size = 2**i\n",
" n = 2**i\n",
" m = n//2\n",
" d = 10\n",
" x, y = prepare_data(n, m, d)\n",
" print(\"On iteration: {}, n: {}, m: {}, d: {}\".format(i, n, m, d))\n",
" \n",
" start = time.time()\n",
" function(x, y)\n",
" end = time.time()\n",
" \n",
" benchmark_dict[i] = end-start\n",
" \n",
" return benchmark_dict"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "308bab03",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"On iteration: 1, n: 2, m: 1, d: 10\n",
"On iteration: 2, n: 4, m: 2, d: 10\n",
"On iteration: 3, n: 8, m: 4, d: 10\n",
"On iteration: 4, n: 16, m: 8, d: 10\n",
"On iteration: 5, n: 32, m: 16, d: 10\n",
"On iteration: 6, n: 64, m: 32, d: 10\n",
"On iteration: 7, n: 128, m: 64, d: 10\n",
"On iteration: 8, n: 256, m: 128, d: 10\n",
"On iteration: 9, n: 512, m: 256, d: 10\n"
]
}
],
"source": [
"non_vect_benchmark_dict = benchmark(upto=UPTO_POWER_OF_TWO, function=non_vect)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "129f227c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"On iteration: 1, n: 2, m: 1, d: 10\n",
"On iteration: 2, n: 4, m: 2, d: 10\n",
"On iteration: 3, n: 8, m: 4, d: 10\n",
"On iteration: 4, n: 16, m: 8, d: 10\n",
"On iteration: 5, n: 32, m: 16, d: 10\n",
"On iteration: 6, n: 64, m: 32, d: 10\n",
"On iteration: 7, n: 128, m: 64, d: 10\n",
"On iteration: 8, n: 256, m: 128, d: 10\n",
"On iteration: 9, n: 512, m: 256, d: 10\n"
]
}
],
"source": [
"vect_benchmark_dict = benchmark(upto=UPTO_POWER_OF_TWO, function=vect)"
]
},
{
"cell_type": "markdown",
"id": "77d9a723",
"metadata": {},
"source": [
"## Plot"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "322805ff",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAI1CAYAAABL8WyLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAACEyUlEQVR4nOzdd3gc1dXH8e+RLMlFrnI37oCN7VCNbaoNmF5NC8WUUMIbIA2SYEKJSUIICYQQCAkQwGA6hBp6r7bBgKnGuGIwuMm9ySrn/WNm5d3VStqVVlqt/Ps8zz7avTN35uzs7GrOzL1zzd0RERERERGpj5xMByAiIiIiItlPiYWIiIiIiNSbEgsREREREak3JRYiIiIiIlJvSixERERERKTelFiIiIiIiEi9KbEQ2UqZ2etmlvH7TZvZJDNzM+uX6VgEzOzM8PM4M8NxjAnjmJjJOJqbpvK9T4b2geZDv/NbDyUWknZm1i/8AXEze6KaeY5vCv8wzOy8MI6ba5kv18wWmVmpmXVroFgi221SQyxfkmdmHcxso5kVm1l+LfP+OfzcLm7AeLLmYFAkFeF35/VMxyEi6aHEQhra0WY2KtNB1OABYCNwci0HkAcBPYFn3X1Jo0TW8E4Hdsh0EE2Ru68CHgM6AUdVN5+Z5QKnAaXA5EYJruE9TrBfPJ7pQKRBZNP3/j2CWGs88SNZ4VKCz3JRpgORhqXEQhrSfMCBP2c6kOq4+xrgv9RyAAn8KPx7Z4MH1UjcfaG7f5npOJqwyGd9Zg3zHEyQcD7j7ksbPKJG4O6r3f1Ld1+d6Vgk/bLpe+/uG8J9cXmmY5H6cffvw8+yNNOxSMNSYiEN6QvgQWC0mR2abCUzG21mL5jZyrA5ymdm9hszy4ubr7L9rZkNN7OXzGytma02s8dTaMsZOYD8UaKJZhZJOpYAz4RlOWZ2rplNM7N14eNdMzu2mmW0N7M/mNnn4XtaEdb9VTj9TIJEDOCMqKZkbmZjopbT1cxuNrOvzWyzmX1vZnebWf8E61wQPjqa2S1m9q2ZlZvZMeH0mOY1cU3Yqnv0i1vHceFyVofv6yMz+3E126C/mT1qZqvMbE34Ge+YaN5q6u8bxvDPaqbvEk6/J6psezO7J9wOJWHTpg/N7KokVvkqsAA4xMy6VzNPlYQzjOMRM1sSrnOumV1jZoXVxH28mb0Stb/PMbNbzaxPON2B0ZHnUY9Jccs518ymm9n68HvwlpmNS7C+iZH9yszOCj+zjRY2W7QEfSwi+0oNj4lx6xhoZneF+9zm8O8tZtYlQTwtzOxyM5tvZpvMbKaZnVfN9q5W1P7eyczuMLOl4fuaagl+f2xLm++BZvbrcL0lZvb3qHnGhdtxbbhdp5vZOdWsP/Kb8G64f68Pl3mDmXWsx/YZa2YvWvBdLzGzxWb2mpmdFDffcDN7zMy+CedbamZTzOzCuPmqNKuL2ydOidonvjezG82sVYK4CsP39l0474dmdkKi/aea7TUmKo7RcfvTmdHzJNi/PHwf25jZQxb8nq624HvXLZxnr3A7rTWzZWGsMf9DwvlS+i2v4f20DPejD8NlrDGzGWb2x/j1JrtfRW9LMzvazN43sw0W/P5fHM5j4XpnW/D9+cLMjkywrMh3uJWZXR/uc5vM7GMzOy3B/D3N7Pdm9l64/Uos+G26zsza1rD8lmb2Jwu+z6Vm9otwepU+FuG2Py98/yvD97bQzP5rZrvFLT/PguOAz8L9baWZPW9moxPEEllXfzP7mZl9Gcb/tZn9zsx07NuAWmQ6AGn2rgCOB64xs+fdvcZ24hb8s7wPWA88BKwEDgeuBfYxs6MSLGN34DfAa8CtwC7AMcAPzGyYu2+qJcbXgXnAwWbWw92/j5t+ClAATHb3MjMzgiZUJxIkT3eH8x0O/NfMfuHuN0a9p27AW8B2wPsEl/ULgGEEl4evA2YANwI/Bz4Gnoha/4JwOV2BaUA/4CXgfmAQQVOcw81s7wRnIgsIDpBbRy1zRTXbYRWQ6IC7FXARwYmIym1pZn8FfgV8TfBZbQAOBG41sx3c/ZdR8/YC3gF6AE8DnxN8Tm+F7zcZbwELgRPN7OfuXhY3/dTw771R63wPyAOeJNiOHYHBwP8Bv6tpZe4eOXifSLCN/xo93bYknIuB58KycQTJ9GaC7b0Y2BWYAOxnZvu6++aoZfwD+CmwFHiE4LPpD5wQLnMhwWdyJtCX2M9nRtRybgF+QvBZ3ArkE+yfj5nZb9w9JvbQJcA+BJ/HC8DaGjbHJILvSbwTgCEEn30klj2A54GWwFMECXNkmx9sZru7e/Q+eCfB9p0N3AS0J9jWb9YQT3XygZfDv3cRXIk8CfifmZ3o7v9NUOdmgt+QZwi2xbzwffyG4HdnGcF3fDNwHHC7me3i7hdEveccgiufxxB8BvcQNLHcFvhxWH9lqtvHzI4I51kc/i0GugPDCX5XHwzn24Xg+7WeYF//HugM7AicQfJNiS4EDgmX8Vr4/GfhsiLfr0gTwGcJ9p/p4fvrSdAc8OUk17WAYH/+HcE2mxQ1bUYS9TsS/CZ8S/BZ70ywTXpbcMLmBYLv0G3AocAvgDVEfe9T/S2vjpm1Bl4BRgEzgdsJrtYPJvjfdB3B72tK+1WUY4EDCJonvhO+vs7MNgBDCfa7/xH8Ro8n+N4PcffZCZb1CMH/nofZ8jtxj5l1dvcboubbF/hl+L7eDd/PSOBiYF8z26uaqw+Ph8t/nmB7f1vddgu3w6+AT8JtUQJsA+wH7AF8AJXfr8cJPpcvCH4nOgE/BF41s1Pd/cEEy/8rwUmZ/xHsD8cQ/J7nA5fVEJfUh7vroUdaHwQHvg78L3z9z/D1KVHzHB+WTYwqaw+sJvjnuENUeR7BPysHzogqHxOWOfDDuBjuCctPSjLmK8L5f5Ng2vRw2g7h6/PC1/8EcqPma0Nw4F8C9Iwqfyyc//IEy+6VYLtNqibGSeH0K+PKzwrLX4srXxCWPwu0TLC814OfgBq3ixH8A3LgV1HlB4dlT0QvO/ysngin7Z7g87gobvm/j/oM+yXxOV0TzntEXHkOQdvd7yOfCcEBkQNHJ1hOUZL7RV+gHPg8wbQLw+VfG77uTPCPdF705x9O+3WCbXhUWPYB0D5u/lZAp2Q+q6jvwcdAYVR5z3B7lAIDo8onhvOvAYYmWN6Z4fQza9k2R4bb5n2gVViWT3CQuIKo73A47YRwuTdHle0flr0Xtx8NIUhiY34jaoknsr+/ArRIsKylceuYFM7/NbBN3LK2BcrCfap7VHlb4LOw3uio8si+9ixQELes9pHPpQ7b5zGC35OuNe3DwN/CujvVtq8n2pei9olVwKC4/XBW+DlH/6adG87/KGBR5aPZ8n2ucf+JquPA67Xs2xMT1HHgL3HlT4XlK4HDo8rbEHwXVgB5UeUp/ZbX8B4i2/92ICduWrfI/liH/erMsKwE2CWqvBfBPr2K4EA7el84Ln4/iv7cCU7qxP9OLAmXF/0ZdwHaJHivl4fLGV/N8j8AOiSoN4m43/nw85geve3D8hygY4Lt8AKx3+2hBCc1VgHtEqxrHtAjqrxzuG+sAfKT2T/1SP2R8QD0aH4PqiYW3YF1wNzIjzqJE4szwrIbEyxzeDjt1aiyMWHZGwnmj0y7PsmYe5PgABL4QbicKVFln4Q/ZFV+mIAjwvkvjHrvFcCX8T+eNWy3SQmmFRCcAV1CXJJAcPD/aVi3T1T5grBsWDXre53aE4vIgf8dceVPhe+rW4I6w8I618XF/h1R/9TDaW3Cfy4x/3BqiCey7AfiyiMHqDdElUUO9g6q5/78UricEXHlH4Tlg8LXF4WvT0ywjByCA9vpUWXPhfPvnUQM1X5WBGdrHRiXYNqviEtG2XIQeV01yzuTWg4MCc6EryU4Gxn9j/tYqknQw+nTgWVRr+8kQaIYTruNuiUWe9awrHFRZZOI+q7Gzf+7cNovE0yL/HbdGVU2kyCB619LjKlun8cIfjs71rLcyIHt9nXZl6L2iasSzB+ZdmT8MohLjuL262r3n7j5nbolFmuB1nHl48NpryRY1n/Caf2jypL+La8h/hYEB6rFRB3cVjNvqvvVmST4/Q2nRU62nRZXnkOQiLwRVx75zE5JsKzfVhdXgnk7keD/VNTyq3yXw+mR71u/qLIVwNtEJafV1H0trLtLgmk3h9NOT7CuH9UQxw+S2T/1SP2hplDS4Nx9sQXtli8jaBaQsI08sFP4940Ey5huZuui5on2QYKyyOXXDpECC9rt9oub7wl3n+Hu35jZy8BBZjbC3d8Lp8e0oQ8veQ8DvgF+G1xJjxFpIz04/Duc4MD/VXcvTxBnsgYRNJ14yeOadrm7m9kbYVw7ETSfidjk7p/VZYVmdgrBlZy3CJrZRBtJ8I/9Jwm2QaQ9cWQbbB/G/p7HXTp39/VmNoPg0net3P0zM/sYOMrMCt19XTgpphlU6GmCKxyPm9nDBAnCm+5e06X5RO4ExhL8k38PwIK+IbsC77r7rHC+keHfvcxsSILllLJlm0DQ/GaDu7+dYjzxqv3esKX5UqLvzfS6rCxs2vc0wQHMUR7bdDCyDYZa4ltJtwI6h80ulkfFlWgbvE1wZjwVpcDUGpa1E1XvdpVoOyS9TS3oOzMYmOnu82uJL9Xt8xAwDvjMzB4gaNb4jlftWP8IQTPKqeF8rwBvufuyWuKJl9RvKcF7X+3uMxPM/y5BE6qGNtvdN8SVRfbFRM0rF4d/ewLz6/BbXp3BBFccnvPgZiA1qet3NdH7Sfhe3b3CzJYRvM9E3kpQFvn+xazbzE4guKqzM0HTs+i+CT2qWX4qvysPETQB/NDMHiXYBu97VHPRqLjWuvtHCZbxOnBBfOyhZPdnSSMlFtJY/krwA3KFVT9OQ7vwb3W3c11C0DQlXqIf80j7+9yosjMJO8FGWcCW9rx3EtxW9kfAe2bWguCAdQNhW2aCH1cD+lBzG/024d/24d/vapg3GbVtm8Vx80XU6U5FFtwi+A6CS8nHJvih70Tw+5HKNqjuICfV2/feS7A/HUvQNriA4PL/l+5e+Y/E3eeH7dknErQjPhPAzD4ELnX3F5Nc3+MEl89PNrNfunsJie8S1in8+7Mkl9ueoFlMfbUDyjy230JEdfsFpL7dMbOWBE3degMnuPuHcbNEtsHptSyqDbCcYBuUenB733rHBxS7e0UNy2pfw7Ro1X7f3H25mZVFzZPKdzyl7ePuD5lZKcHVsF8StG8vM7PnCc4uzwljmmJm+xOceT4HOB9wM3uToPldsgd7yf6WtmXLzSbiNdbd0RLFWl7DtMj7iJz4SPW3vDqpfP6p7FfR6vJeq3RUDyX6fKp8P8zs18BfwvmfI2i+FTmp9TuCK9GJpPK9/RnBfvQj4I9h2VoLbsAxIerEUTuq399q+o1Ldn+WNFLPeGkU4Rm2awjam/6ymtkiPwLVDUDXjcQ/FMnGMMbdLe4xKWqWJwguzZ4UHkAdDnQFHnX3SMfWyPqnJVhW9CNy4Lkq/Fvd2aNkJbNtoueL8FRXZMHdiJ4g6FR4pCe+1eMaYEkt2yByFSJydrXKHW/iYk/WAwTNsCJXKY4g+Id4X/yM7v6Jux9LcBCxN8E+uD3wlJnVdiYysoxN4To7AMdYcIeXU9lyg4GIyLbfoabtEjX/Kqo/65eKNUCLsDN5vOr2C6jDvkGQSI0CrvDEHaEj6zm0ln0jklCtBvLMrEMNsaeiqJo7vkSWlegWuom2Q7XfNzMrYkvzl+hlJvMdT3X74O6PufveBEnJEQQ3bTgCeM6ixt5x9zfc/WCCfX0swZXhPYHnzaxzErGlYi3Vf5+7pnldDSXV3/LqrAr/pvL5J7NfNZREn0/M9yM8qXY5QbI01N1Pc/cJ7j4R+FdNC3f3pH9X3L3U3f/i7jsQnKw4neBE3wXEtmxYU03c0bE39HaTJCmxkMb0T4LLzr8GihJMnxH+3Td+gpntChSS3N1C6iQ8E30/4QEkCc5KhwnGl8AQS3DLvQQi7fD3D++kUpPIGahE880iOFs0IjxDHy+yzZK9w1JCYbOOpwk6uf3Q3b+oZtb3gG6W3C19v2JL7PG3XWxDcJk9ae6+iODy9wEW3Ab2VIJtXCWxiKqz2d3fcfffEjTvKiDogJ6s6FsSH05wUPVI1Bk1CJtJERx4J+N9oLWZ7Z3EvOVQeTeeeDPCv1W+N2y5QjcjwbSUmNmVwMnAfe5+dTWzpboNIvtrom2QzHaJl1fNuiPLSvb7MSP8W+s2DfeBmcB2SXwfUt0+lTwYX+QZdz+D4K5N25JgoDsPxn54xd1/CtxC8Fu7V6rrq8XHQPtqkvM9UlxWBRk4e1yH3/LqzCJItEaaWaKz5tFmhH8b9Ltai30SlMV/PzoTXAGYkuDEUrr3JQDc/Vt3n0yQFC8jdlypGUA7M9s5QdXG2m6SJCUW0mjCM78TCX6wfp1glicJzjqcY2bbRwrDsyeRQfbuSVAvnSIHkL8EDiPocB5/28ubCJoC/Du8shHDzIaGt4bF3RcTNKUZRHBr2fh5e0W9XElwgNw7fr4w6XmI4OzMxXHLOIOgM+3r7r4wvm6ywjO994fLusjdn69h9pvCv3ckOttswZgY/aJif4Tg7PxP42a9hOAMa6ruJTgY+QnB5/RufPt2M9u1mn/0kTNctd2GuFLYxOoTgtvpXhIWxw+WeBdBR9trzGxQ/DIsGMtkl6iiyJm/G82sfdy8LeOuQESaOVXZN9jynfhdmKhFltGdoPN2GcHnWmdmdiLBd3cKcHYNsz5BePIgbE4Xv5xWZjYyqijSJ+bK6O9S2EeltuZC1flD+JsRv6xlhLcFTsL9BMncryLf5XBZhQTbAWJ/i/5FcLb5n9FXEcI67WzLGCZPkML2MbN94pPJ8HsauQKxKSzbo5oTDinv60l6IPz7e4vqnBAmyan2r1hBcIvRTEj6t7w6Htz2+naCK0rXxV8xs2Dsocj+mOp+1RAui9ofMbMeBP1zSgjuAAhB86dNwK4WNYZJOO+f0hGEmRWETVXjtSXoaxS9z0a2yTXR3wcz24Gg6d9qguMHaQLUx0Ia290EBzuJzrStNrP/IzjYeN/MosexGEpwL+oG/dF1948s6Ew8Iiy6K8Gl3X8RNDE4lWBsjVcJ2nn2ILiL1C4EZ+0ibVnPJzhY/4OZHUVwtj2f4D3tSnj1xt3Xmdn7BPcIn0xwX/8KgvEzvia4H/po4Goz2xf4kCBhGUdwR5L4DtapOp7gFqLfA52q6Vz6d3df5e7Pmtk1BMnSbDN7gaBTXBeCz3YUwfgfC8J6lxIclF9vwYB/n4XvfQ+CzoSJzqLV5L8EZ2MvJThLnehqxenAuWb2FkGCuJbgcziEoIP7wwnq1ORO4O8E7222u8d0gnT3pWZ2KkEC+KmZPUvwGbYhGJtiDMH+/3/h/E+b2U0EydZXFgxQt4KgzfchBAfwT4SLf5Xg8/mvmT1H8E/3Y3d/2t1fN7N/EXz+n5rZ42y5P31XgjsQzU3xvcabRNAe/WPgUqva0fV1d3/d3Uss6PD5HPCumb1IcDvMFgQ3ThhNkJwcEm6DV8N9/TTgYzN7iuDEw8kEd705PMU4vydIVGeY2TPh85MJ9pHzvfYxbQjjmmNmvyW4z/4nZvYIQcfwceH7uMXdozvg/pNgnIGjCT7Lpwn6Zg0gGENhb2BGqtuH4MC3u5m9Q/BdMoIbHexMcNe9yI0DLgHGWNCnYj5BM8aRBN+rDwn2n3S6g+D7dQLQz8xeIfj9+yHBLXcPJ/jtSsarBGPTPAF8RHDg/ZS7f5LmmBNJ9be8OlcQnMk/l+DmDS8QvP/tCa6MdgNW1WG/agjzCW4G8F+C34kfEvxuXxReDY50AP8XwQm2j8LvUqQp3hsE/3fqqxXBd+BLgn30G4ImrUcRtE6YGDXvPQS/f4cTfLefJfhun0Rw9fksr73jvDQWbwK3ptKjeT2Iu91sgunHsOU+5BMTTB9DcL/qVQQHUJ8T/OOMv1XpmBqWEYlhUh3i/2lYt5y4+9vHzXcqwW3wVhKc7VkYxv0T4u7/TfAjeA1Bs6ASgkRgKnG39yP4R/RMuMyKMI4xUdO7EtxebyHBwcNigh/dKre5JDgQWVBD/K8TddtJttzasKZHv7hlHBrGuzyMZxHBP56Lgc5x8w4gSAhWE1yZeoHgQH9SomUn8TlFxtfYTIJxKQgOrG4lSGJWEfSJmEnQIbHKuABJrK8o/OycoPN3dfMNCd/TN2Fsywn+cf4ZGJxg/pMIroqtITgYnQ38G+gdNU8LgoORrwkORGL2bYIDznMJmt5tILhy8hZBx/v49U2M36/ipkf2gzOjymrbLybGLaNPuJ/ODbfZSoJbIt9E1PgmUe/tinB/LQk/o/+jhu93NXEvCB+dCA58I2ddpxH0aYifv9b9juAGAW+H23NDuH3PrWbeyBW098N9bR1B0nA9cff1T3b7EBz0PRzOt4Et9/3/KVG3SCU4eL2bLc1yVhNcYbuMuFugUvPtZqvsE4n2h7C8LcGgnt8T3E76I4JE42Kquf1xNdutO0EyvozgN7dyXdXtA1Rzi9qa9pla3mPSv+U1vI9WBCc6Pg23x2qC5jm/p+r/rqT2q+q2fW37Lwl++9lyO9hW4T75bfhePyXqVq1R8+cDVwJzCL5Hc9kyuFyV7Z9ov6opXoJk/xLgxahYvie4e9+RCepH5v+cLWN4vEDUuB9Jbptq9wM90vOwcEOLiIhkLTNbAODu/TIbydYtvAI1nqDTb3V9tKSRmdnrBAfhVS43iqST+liIiIhISsL29vFlexNcgZutpEJk66Q+FiIiIpKq282sJ0HTr9UEA8VF+lYkO5aLiDQzSixEREQkVQ8TjMp8HEGn29UEHbevcfd3MxmYiGSO+liIiIiIiEi9qY+FiIiIiIjUm5pCJdC5c2fv169fpsMQEREREWlyPvjgg+Xu3iW+XIlFAv369WP69OmZDkNEREREpMkxs68TlasplIiIiIiI1JsSCxERERERqTclFiIiIiIiUm9KLEREREREpN6UWIiIiIiISL1l9K5QZrYNcAkwHNgJaAX0d/cFtdTbHrgA2A8YAKwF3geucPePGzLmaGVlZZSVlVFRUdFYqxSps5ycHPLz88nJ0fkEERERSb9MH2FsC5wIrATeSqHeQQRJxd3AkcD5QBdgqpntlu4g45WWlrJ06VLWrFlDWVlZQ69OJC0i+21paWmmQxEREZFmKNPjWLzp7t0AzOwcgoQhGQ8C/3R3jxSY2avAAuDnwOlpjrOSu7NixQq6dOmiM7+SdQoLC1myZAldu3bV/isiIiJpldEjC3evUxsid18enVSEZauBr4Be6YitOiUlJbRu3VoHZZKVzIw2bdroqoWIiIikXbM5OjazTsAwYGYd638QedQ0X0VFBbm5uXVZhUiTkJubS3l5eabDEBERkWam2SQWwE2AAX/PcBwiIiIiIludZpFYmNmlwCnAhe4+py7LcPfdIo/0RiciIiIi0vxlfWJhZv8H/Am43N3vzHQ8IiIiIiJbo6xOLMzsNOAW4Hp3vzrT8Uh2WrVqFRMnTuTDDz9M+7Jff/11zIzXX3897cuuzpgxYxgzZkyjrU9EREQEsjixMLNxwF3Af9z9V5mOR7LXqlWruOqqqxoksdh1112ZMmUKu+66a9qXLSIiItKUZHocC8zs+PBppG/DoWa2DFjm7m+E85QBd7v72eHrfYEHgI+BSWY2KmqRJe7+UeNEL5JYeXk57k67du0YNWpU7RVEREREslxTuGLxSPj4v/D1LeHrq6LmyQ0fEfsDBcCuwDvAlKjH4w0cb7M0ceJEzIzZs2dz+OGHU1hYSN++ffn9739PRUXscCOzZs1i3LhxdOjQgVatWjFq1Cief/75Oi8vWklJCZ06deKiiy6qMu3hhx/GzPjooy154xtvvMEBBxxA27ZtadOmDQcffDCfffZZlbqPP/44e+21F4WFhbRr144RI0bw1FNPsWDBAvr37w/Aueeei5lhZkyaNAkIBkS84YYbGDRoEPn5+fTo0YMLL7yQNWvWxCzfzLjsssv485//TP/+/cnPz+fTTz+t0hQqsl0SPSLrBJg/fz6nnnoqXbp0oaCggJ133pnHH6+6az/44IMMHjyYgoIChg4dmnAeERERkcaQ8cTC3a2ax5i4ec6Mej2xhnr9MvA2mo1x48ax//7788QTT3DMMcfwu9/9jrvvvrty+nfffcfee+/Nxx9/zM0338zDDz9Mhw4dOPzww3nuuedSXl68goICTjzxRB544IEqYy1MnjyZYcOGscsuuwDwzDPPcMABB1BYWMi9997L/fffz9q1a9lnn3345ptvKuvddNNNHHvssXTt2pW7776bRx55hHHjxrFgwQJ69OjBY489BsCll17KlClTmDJlCocffjgAl112GRdddBEHHnggTz/9NL/5zW+YNGkShx9+eJUEadKkSTzzzDNcd911PPPMM/Ts2bPK+zvnnHMq1xF5HHfcceTm5rL99tsD8M033zBy5Eg+/vhjbrjhBp566il23XVXjjvuOJ566qnKZb388succsopbLfddjz22GP8+te/5uc//zmzZs2qdvuKiIiINBh31yPusdtuu3l11q9f7+vXr692+m1vzPXd//hSrY9x/3y7St1LH/skqbq/fOijKnVPvm2K7/7Hl/y2N+ZWG1tNfve73zngd955Z0z5sGHD/MADD6x8ffHFF3tubq7Pnj27sqysrMy3335732WXXVJeXiJvv/22A/78889Xli1dutRbtGjh1157bWXZwIEDff/994+pu3r1ai8qKvKf//znla8LCwt93Lhx1a5v/vz5Dvjtt98eU15cXOz5+fl+xhlnxJRPnjzZAX/yyScrywDv0aOHb9iwIWbe1157zQF/7bXXEq774YcfdjPzG2+8sbLsrLPO8s6dO/vy5ctj5h07dqzvtNNOla/33HNP32GHHby8vLyybMqUKQ746NGjq32/te3DIiIiIjUBpnuCY+iMX7FobtaVlLF0bUmtj+L1m6vUXb2xNKm6qzeUVqm7Yv1mlq4tYV1JWb3ij5ypjxg2bBgLFy6sfP3mm28yatQott1228qy3NxcTj75ZGbMmFGliVBty0tkr732YuDAgUyePLmy7MEHH6SiooJTTz0VgNmzZzN37lxOPfVUysrKKh+tW7dmjz324M033wTg3XffZd26dfz4xz9OYSsEpk6dyubNmxk/fnxM+UknnUSLFi144403YsoPOeQQWrVqlfTyp0+fzhlnnMH555/Pz372s8ry559/nsMOO4z27dvHvLeDDz6Yjz/+mDVr1lBeXs7777/P8ccfT07Olq/xqFGj6NevX8rvVURERJq2KXOLOefu9/nPW/NYWLwh0+EklPHO281NYUELurYtqHW+ojb5Vcrat8pLqm771nlVyjq1yadr2wIKC+r3kXbq1CnmdUFBAZs2bap8vWLFisqmSNG6d++Ou7Ny5UratWuX9PKqM378eK677jrWr19PmzZtmDx5Mvvvvz+9evUCYOnSpQCcffbZnH322VXq9+nTB4Di4mIAttlmm1rXGW/FihUA9OjRI6a8RYsWFBUVVU6PiJ+vJt9++y1HHXUUY8aM4cYbb4yZtnTpUu655x7uueeehHWLi4vZuHEjpaWldOvWrcr0RGUiIiKS3d6cvYyXZy7l5ZlLKSrMp09R60yHVIUSizQ7d98BnLvvgDrV/dO4H/CncT+oU937z22cOw916tSJxYsXVylfvHgxZkbHjh3Tsp7TTjuNq666iscee4yRI0fy/vvvx/TNKCoqAuCaa65h7NixVern5weJW+fOnQFYtGgRw4YNSymGSFK0ePFihg4dWlleVlZGcXFxlaTJzJJa7vr16znyyCPp3LkzDz30ELm5uTHTi4qK2GeffbjkkksS1u/ZsyctWrQgLy+PJUuWVJm+ZMkS+vbtm1QsIiIikh2mziuufD6yf1EGI6meEgtJyejRo/n73//OggULKpvclJeX89BDD7HLLrvEXK2oj4EDB7LnnnsyefJkvvrqK9q0acOxxx5bOX3QoEH069ePzz//nAkTJlS7nD333JPCwkJuu+02Dj744ITzFBQEV4k2btwYUz5q1Cjy8/N58MEHOeCAAyrLH3roIcrKyuo0CJ27M378eL7//nvee+892rZtW2WeQw45hClTpjB06NAam1btvvvuPProo0ycOLGyOdS0adNYsGCBEgsREZFmZH1JGZ98uxqAvkWt6dkh+abXjUmJhaTkl7/8JZMmTeLAAw/kqquuol27dtxyyy189dVXPPPMM2ld12mnncYFF1zAp59+yrhx4ygsLKycZmb885//5Oijj2bz5s2ceOKJdO7cmSVLlvDuu+/Sp08fLrroItq2bcs111zDT3/6U4477jhOPfVU2rZty4wZM2jZsiU//elP6datG0VFRTz44IPsuOOOtGnThv79+1NUVMTFF1/MNddcQ5s2bTjssMOYOXMml19+OXvvvXeV/iPJuPbaa3niiSe48cYb+e677/juu+8qpw0cOJAuXbrw+9//nhEjRrDvvvty4YUX0q9fP1auXMlnn33GvHnzuPPOOwG46qqrOOiggzjmmGM477zzWLZsGb/73e/o3r17/Te+iIiINBlzl62jZYsc1m8uZ48BTfNqBaC7QiV61OeuUNkqchen0tLSmPIzzjjD+/btG1P25Zdf+tFHH+3t2rXzgoICHzlypD/33HN1Xl51VqxY4fn5+Q74Cy+8kHCed9991w8//HDv0KGDFxQUeN++ff2HP/yhv/vuuzHzPfLIIz5ixAhv2bKlt23b1keMGOFPP/105fTHH3/cd9hhB2/RooUDftddd7m7e0VFhf/tb3/z7bff3vPy8rx79+5+/vnn++rVq2OWD/hll11WJb74u0KdccYZDiR8RNbp7v7NN9/42Wef7T179qxc79ixY33y5Mkxy7///vt9++239/z8fB8yZIg/9thjPnr0aN0VSkREpJnZXFbuH369wmctXpPpUKq9K5QF0yTa8OHDffr06QmnbdgQ9MJv3brpdZgRSYb2YREREakPM/vA3YfHl+t2syIiIiIiUm9KLEREREREpN7UeVtEREREpIn61+tz+XTRKkYNKOKonXrSoXXVsdCaCiUWIiIiIiJN1ItfLOajhat49tPFHDikGx0yHVAN1BRKRERERKQJih6/ol9Ra3q0b5rjV0QosRARERERaYKmf72S8orgDq6jmvL4FSElFiIiIiIiTdDUecWVz5VYiIiIiIhInUQnFiMHdMpgJMlRYiEiIiIi0sSsy7L+FaDEQkRERESkyZm+YEVW9a8AJRaSAa+//joTJ06koqIi7cs+88wz6devX9qXW50FCxZgZkyaNKnR1ikiIiLN39R5KyqfK7EQqcbrr7/OVVdd1SCJxRVXXMHjjz+e9uWKiIiINKZs618BGiBPmomSkhIKCgoYOHBgpkMRERERqbffHDKIKXOLmb98fVb0rwBdsRDgkUcewcz45JNPqkw77LDD2GmnnQAoKyvjmmuuYfDgwRQUFNCzZ08uvvhiNm3aFFNn/fr1TJgwgYEDB1JQUED37t057rjjWLJkCRMnTuSqq64CIC8vDzPDzCrrfv/995x++ul07tyZgoICdtxxR+69996Y5U+aNAkz48033+SEE06gQ4cOjBw5EqjaFKpfv36V64h/RHvssccYNWoUrVu3pkOHDpxwwgksXLgwZp4NGzZw/vnnU1RURGFhIUcddRTffvttiltbREREpHZ7DuzMxQcN4uZTds10KEnTFQvhyCOPpH379tx777385S9/qSxfsmQJL774Itdeey0A48eP5+mnn+aSSy5hzz33ZObMmVxxxRUsWLCA//73vwBs3ryZAw88kI8//pgJEyYwatQoVq9ezQsvvMDKlSs555xz+Pbbb7njjjt4++23yc3NrVzf+vXrGT16NCtXruRPf/oTvXv35t577+W0005jw4YN/PjHP46J+9RTT+Xkk0/m0UcfpaysLOF7e/zxxykpKal8vW7dOk455RSKira0Vfz3v//NT37yE370ox9x5ZVXsnbtWiZOnMjo0aP55JNPaNu2LQDnnXceDz30EL/73e/YfffdeemllzjllFPqufVFREREmgclFun27k3w7s21z9ehD5zzUmzZ07+AWc/VXnfgfjDu37Fldx8Jy76CPS+EPX+adLgALVu25IQTTuD+++/nz3/+Mzk5wYWsBx54AIBTTjmFt956i4ceeoi7776b008/HYCxY8fSqVMnxo8fz4wZM9h555259957mTJlCk8++SRHHXVU5TqOP/74yufbbLMNACNHjqRFiy274F133cXs2bN57bXXGDNmDACHHnooS5Ys4fLLL+fss8+OSUSOP/74mEQokV122aXyeUVFBccccwzuzjPPPAMEicYll1zCj370I+68887KeUeMGMGgQYO44447+MUvfsGsWbO4//77ufrqq5kwYQIABx10EOvWrePf/477LERERES2QmoKlW4l62Dd4tof65dVrbtpVXJ1N66sWnd9cTCtZF2dwj799NNZtGgRr776amXZ5MmTOeCAA+jRowfPP/88+fn5HH/88ZSVlVU+DjroIADefPNNAF588UW6d+8ek1Qk680336RXr16VSUXE+PHjWbZsGV988UVM+bhx41Ja/iWXXMKLL77IE088wYABAwCYMmUKa9as4dRTT415X71792bw4MGV72vatGlUVFRw4oknxizzpJNOSvFdioiIiFRvXUkZj37wLd+s2JDpUFKmKxbpVlAIhd1rn69Nl6plLTskV7dVxwTLKwrqFhTWXj+Bvffem379+jF58mTGjh3LzJkz+fDDDyv7NyxdupTNmzfTpk2bhPWLi4sr//bq1atOMaxYsYIePXpUKe/evXvl9GiJ5q3OHXfcwfXXX8+9997LXnvtVVm+dOlSILj6kkjHjsG2/v777wHo1q1bzPT41yIiIiL18f6CFfzqkY8B+PG+A/jtYTtkOKLkKbFItz1/mnJTpEpH/j141MUZT9etXsjMGD9+PH//+9/517/+xeTJkyksLKy8KlBUVETLli156623Etbv2bMnAJ07d+azzz6rUwydOnVi1qxZVcoXL15cOT0+5mS88cYb/OQnP+HKK6+s0ici0tdi0qRJDB06tErdSP+KSBKzZMmSyqsdkdciIiIi6RJ9m9khPdplMJLUqSmUVDrttNNYt24djz32GPfddx/HHnssrVu3BuCQQw5h06ZNrF69muHDh1d5RBKLgw46iMWLF/P009UnOgUFBQBs3Lgxpnz06NF8++23vPPOOzHl999/P127dmXIkCEpv6c5c+Zw7LHHcsIJJzBx4sQq0/fcc0/atm3LnDlzEr6vQYMGAUF/kJycHB5++OGY+g8++GDKMYmIiIhUJ3pgvGwZvyJCVyyk0vbbb8/IkSOZMGECixYtquykDTBmzBhOPvlkjj/+eC666CJGjBhBTk4OCxYs4Nlnn+Xaa69l++23Z/z48dx+++2cfPLJXHrppYwcOZK1a9fywgsv8Itf/ILBgwdXJgjXX389hx56KLm5uQwfPpwz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\n",
"text/plain": [
"<Figure size 921.6x633.6 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x1 = list(non_vect_benchmark_dict.keys())\n",
"y1 = list(non_vect_benchmark_dict.values())\n",
"\n",
"x2 = list(vect_benchmark_dict.keys())\n",
"y2 = list(vect_benchmark_dict.values())\n",
"\n",
"plt.title('Non-Vectorized vs Vectorized processing time comparison')\n",
"plt.xlabel('power of 2')\n",
"plt.ylabel('Processing time(in seconds)')\n",
"plt.plot(x1, y1, '--', x2, y2, '--');\n",
"plt.legend(('non vectorized', 'vectorized'), loc='upper left');"
]
},
{
"cell_type": "markdown",
"id": "2b55498e",
"metadata": {},
"source": [
"___"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment