{
"cells": [
{
"cell_type": "markdown",
"id": "6cd0f8cf",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Broadcasting exercises"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "282817dd",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T20:08:23.900532Z",
"start_time": "2023-06-27T20:08:22.963157Z"
},
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"id": "acba732f",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Exercise 1\n",
"\n",
"```\n",
"What is the expected output shape for each operation?\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "a41d0f74",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T19:58:58.881059Z",
"start_time": "2023-06-27T19:58:57.830Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(5,)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.arange(5)\n",
"b = 5\n",
"\n",
"np.shape(a - b)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "6f82a2fb",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T19:58:58.884966Z",
"start_time": "2023-06-27T19:58:57.833Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(7, 7)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.ones((7, 1))\n",
"b = np.arange(7)\n",
"np.shape(a * b)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "808095ad",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T19:58:58.888119Z",
"start_time": "2023-06-27T19:58:57.836Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(2, 3, 3)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.random.randint(0, 50, (2, 3, 3))\n",
"b = np.random.randint(0, 10, (3, 1))\n",
"\n",
"np.shape(a - b)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "d9a12a90",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T19:58:58.891462Z",
"start_time": "2023-06-27T19:58:57.839Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(10, 10)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.arange(100).reshape(10, 10)\n",
"b = np.arange(0, 10)\n",
"\n",
"np.shape(a + b)"
]
},
{
"cell_type": "markdown",
"id": "69632f95",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Exercise 2\n",
"\n",
"```\n",
"1. Create a random 2D array of dimension (5, 3)\n",
"2. Calculate the maximum value of each row\n",
"3. Divide each row by its maximum\n",
"```\n",
"\n",
"Remember to use broadcasting : NO FOR LOOPS!"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ad362a83-4821-4146-b4bc-c781bb31c714",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T19:58:58.894433Z",
"start_time": "2023-06-27T19:58:57.843Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0.04512288, 0.29887872, 0.71583331],\n",
" [0.96876287, 0.89086747, 0.53374129],\n",
" [0.80630616, 0.05463225, 0.23587356],\n",
" [0.12837335, 0.29644576, 0.71527555],\n",
" [0.0672898 , 0.99300472, 0.49310665]])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = np.random.random((5,3))\n",
"x"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "395a6807-e826-4301-9f13-f15c0e4e2e11",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[0.06303546, 0.41752558, 1. ],\n",
" [1. , 0.91959291, 0.55095143],\n",
" [1. , 0.06775621, 0.29253598],\n",
" [0.17947398, 0.41444974, 1. ],\n",
" [0.06776383, 1. , 0.49658036]])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m = x.max(axis=1)\n",
"y = x / m[:, None]\n",
"y"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "a94ef9c2-4efc-4d03-be10-7e1e9681addd",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1.],\n",
" [1.],\n",
" [1.],\n",
" [1.],\n",
" [1.]])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# check\n",
"y.max(axis=1)[:, None]"
]
},
{
"cell_type": "markdown",
"id": "b9facc0f",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Exercise 3"
]
},
{
"cell_type": "markdown",
"id": "7e8156d0",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Task: Find the closest **cluster** to the **observation**. \n",
"\n",
"Again, use broadcasting: DO NOT iterate cluster by cluster"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "2969994e",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T19:58:58.899204Z",
"start_time": "2023-06-27T19:58:57.847Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"observation = np.array([30.0, 99.0]) #Observation\n",
"\n",
"#Clusters\n",
"clusters = np.array([\n",
" [102.0, 203.0],\n",
" [132.0, 193.0],\n",
" [45.0, 155.0], \n",
" [57.0, 173.0]\n",
"])"
]
},
{
"cell_type": "markdown",
"id": "f13352ff",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Let's plot this data\n",
"\n",
"In the plot below, **+** is the observation and dots are the cluster coordinates"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "b9f6b5cf",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T19:58:58.906715Z",
"start_time": "2023-06-27T19:58:57.850Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster 0\n",
"cluster 1\n",
"cluster 2\n",
"cluster 3\n"
]
},
{
"data": {
"image/png": "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+N643Sv820tszCAB32rVTFJ+fr5uuukmhYeHq1evXrr77rt93905wzAMzZs3T06nU127dtWwYcO0d+9evzput1vTp09Xz549FRYWpszMTFVVVQXmiAAAF80aZNGP+0fprqF99OP+UQQk4CytCklbt27VE088oQ8++ECbNm3SN998o1GjRvm9TGzRokV6+eWXVVBQoJ07d8rhcOi2225TfX29r05OTo5KSkpUXFysbdu2qaGhQWPHjm3xYjEAAID2clmvAPj73/+uXr16aevWrbrllltkGIacTqdycnL01FNPSadnjWJiYrRw4UI9+uijcrlcio6O1ooVK5SVlSVJOnbsmGJjY7V+/XqNHj36O3+3oz1CCAAAOt75+7Ju3Ha5XNLpl4pJUmVlpWpqajRq1ChfHZvNpltvvVXbt2+XJJWVlcnj8fjVcTqdSkxM9NU5l9vtVl1dnd8CAADQli45JBmGoZkzZyojI0OJiYmS5Pu44LkfFIyJifFtq6mpUWhoqHr06HHeOufKz8+X3W73Ld/15lUAAIDLdckhadq0afrrX/+q1atXt9h27teZDcNoUXauC9XJy8uTy+XyLUeOHLnUbgMAAFyUSwpJ06dP1xtvvKEtW7aob9++vvIzX2k+d0aotrbWN7vkcDjU1NSk48ePn7fOuWw2myIiIvwWAACAttSqkGQYhqZNm6Y1a9bo3XffVXx8vN/2+Ph4ORwObdq0yVfW1NSkrVu3Kj09XZKUmpqqkJAQvzrV1dXas2ePrw4AAEB7a9XLJJ944gmtWrVKr7/+usLDw30zRna7XV27dpXFYlFOTo4WLFiggQMHauDAgVqwYIG6deumSZMm+eo+/PDDmjVrlqKiohQZGanZs2crKSlJI0eObJujBAAAaKVWhaRly5ZJkoYNG+ZXXlhYqH/913+VJM2ZM0eNjY16/PHHdfz4caWlpWnjxo0KDw/31V+8eLGCg4M1YcIENTY2asSIESoqKpLVag3MUQEAAFymy3pPUnvpaO9ZAAAAHe/8zQduAQAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAABAqx08eFAWi0UVFRXt3ZU2Q0gCAADtrqioSN27dw9Ye3v37tW9996rfv36yWKxaMmSJa1ug5AEAACuGM3NzfJ6vTp58qSuueYavfDCC75vy7YWIQkAAJyX1+vVwoUL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XlNTo9DQUPXo0cOvPCYmRjU1Nab75Ofny263+5bY2NhAdxsAAMBPQENSWVmZXnnlFRUVFclisbRqX8MwzrtPXl6eXC6Xbzly5EiAegwAAGAuoCHpz3/+s2praxUXF6fg4GAFBwfr0KFDmjVrlvr16ydJcjgcampq0vHjx/32ra2tVUxMjGm7NptNERERfgsAAEBbCmhIeuihh/TXv/5VFRUVvsXpdCo3N1d/+tOfJEmpqakKCQnRpk2bfPtVV1drz549Sk9PD2R3AAAALlmrn25raGjQgQMHfOuVlZWqqKhQZGSk4uLiFBUV5Vc/JCREDodD1157rSTJbrfr4Ycf1qxZsxQVFaXIyEjNnj1bSUlJvqfdAAAA2lurQ9JHH32k4cOH+9ZnzpwpSZoyZYqKioouqo3FixcrODhYEyZMUGNjo0aMGKGioiJZrdbWdgcAAKBNWAzDMNq7E61VV1cnu90ul8vF/UkAAHQQHe38zbfbAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATBCSAAAATLQ6JL333nsaN26cnE6nLBaL1q5d69vm8Xj01FNPKSkpSWFhYXI6ncrOztaxY8f82nC73Zo+fbp69uypsLAwZWZmqqqqKjBHBAAAEACtDkknTpxQcnKyCgoKWmw7efKkysvL9eyzz6q8vFxr1qzR/v37lZmZ6VcvJydHJSUlKi4u1rZt29TQ0KCxY8equbn58o4GAAAgQCyGYRiXvLPFopKSEt19993nrbNz507dfPPNOnTokOLi4uRyuRQdHa0VK1YoKytLknTs2DHFxsZq/fr1Gj169Hf+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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt \n",
"\n",
"plt.scatter(clusters[:, 0], clusters[:, 1]) #Scatter plot of clusters\n",
"for n, x in enumerate(clusters):\n",
" print('cluster %d' %n)\n",
" plt.annotate('cluster%d' %n, (x[0], x[1])) #Label each cluster\n",
"plt.plot(observation[0], observation[1], 'r+'); #Plot observation"
]
},
{
"cell_type": "markdown",
"id": "4f9b84e2",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Closest cluster as seen in the plot is **2**. Your task is to write a function to calculate this"
]
},
{
"cell_type": "markdown",
"id": "8aea6781",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-26T19:25:08.202848Z",
"start_time": "2023-06-26T19:25:08.194923Z"
}
},
"source": [
"\n",
"**hint:** Find the distance between the observation and each row in the cluster. The cluster to which the observation belongs to is the row with the minimum distance.\n",
"\n",
"distance = $\\sqrt {\\left( {x_1 - x_2 } \\right)^2 + \\left( {y_1 - y_2 } \\right)^2 }$"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "fe168c3e-fa25-4196-8839-c2b7ffd52f7e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"np.int64(2)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.argmin( np.sqrt( np.sum((clusters - observation)**2, axis=1) ) )"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "ea8a7240",
"metadata": {
"ExecuteTime": {
"end_time": "2023-06-27T19:58:58.916610Z",
"start_time": "2023-06-27T19:58:57.854Z"
},
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"np.int64(2)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(clusters - observation).__pow__(2).sum(axis=1).__pow__(0.5).argmin()"
]
}
],
"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.13.4"
},
"rise": {
"scroll": true
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 5
}