Created
November 18, 2019 00:33
-
-
Save matthewchung74/5fd65b0ba89a0266d0bb0bfe6450e41a to your computer and use it in GitHub Desktop.
test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
nbformat: 4, | |
nbformat_minor: 0, | |
metadata: { | |
colab: { | |
name: "01-numpy-tutorial.ipynb", | |
provenance: [ ], | |
collapsed_sections: [ ], | |
include_colab_link: true | |
}, | |
kernelspec: { | |
name: "python3", | |
display_name: "Python 3" | |
} | |
}, | |
cells: [ | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "view-in-github", | |
colab_type: "text" | |
}, | |
source: [ | |
"<a href="https://colab.research.google.com/github/foobar8675/numpy-tutorials/blob/master/01_numpy_tutorial.ipynb" target="_parent"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>" | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "LJWL_Bbzs92k", | |
colab_type: "text" | |
}, | |
source: [ | |
"# A practical introduction to Numpy, Matplotlib and Pandas - Part 1 ", | |
" ", | |
"![alt text](https://miro.medium.com/max/950/1*00pL0zLnfI7y8d5G1aQrHA.jpeg) ", | |
" ", | |
"This tutorial is designed to introduce how to do operations in numpy in a practical way. It primarily uses images an an example since they are easy to visualize, but applies to all data in `numpy` as well as your future data engineering and machine learning endeavors! ", | |
" ", | |
"A few prerequisites: ", | |
" ", | |
" ", | |
"* An understanding of [RGB](https://en.wikipedia.org/wiki/RGB_color_model). ", | |
"* Python programming experience. ", | |
"* [jupyter notebooks](https://jupyter.org/) experience." | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "2afQUDp5s8rL", | |
colab_type: "text" | |
}, | |
source: [ | |
"Now that that's out of the way, let's introduce the designer ... ", | |
" ", | |
"![alt text](https://www.mediabistro.com/wp-content/uploads/2016/04/what-does-a-graphic-designer-do_860.jpg) ", | |
" ", | |
"For this exercise, imagine your designer came to you and said in her menacing voice, "I have a prototyped a photoshop file file where I add a background, border, and color manipulation. Now I have 30,000 images I need to apply this to and it also needs to happen every time a user uploads an image to the website" ", | |
" ", | |
"Wow, that's a lot. But we can take it step by step and learn how to use `numpy` operations along the way! ", | |
" ", | |
"We're going start by creating a black 2x2 1 byte RGB image, which in other words is a 2x2x3 matrix, keeping in mind - ", | |
" ", | |
" ", | |
"* there will be 2 rows and 2 columns to this matrix (2x2) ", | |
"* there will be 3 channels RGB for this matrix (3) ", | |
"* black in RGB has a value of 0" | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "beXud7vCCrnN", | |
colab_type: "code", | |
colab: { } | |
}, | |
source: [ | |
"import numpy as np" | |
], | |
execution_count: 0, | |
outputs: [ ] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "7P1LOCj4pmDO", | |
colab_type: "code", | |
outputId: "52b49a36-33ea-4256-db42-bb70cba073e1", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 102 | |
} | |
}, | |
source: [ | |
"img = np.zeros([2,2,3],dtype=np.uint8) ", | |
"img" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "execute_result", | |
data: { | |
text/plain: [ | |
"array([[[0, 0, 0], ", | |
" [0, 0, 0]], ", | |
" ", | |
" [[0, 0, 0], ", | |
" [0, 0, 0]]], dtype=uint8)" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
}, | |
execution_count: 27 | |
} | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "zSHEwwfq0ntV", | |
colab_type: "text" | |
}, | |
source: [ | |
"And let's take a look at this 2x2 black image using `matplotlib`. For now, don't worry about the specifics of `matplotlib`, we'll dive deeper later on. Just know we can use it to view images and graphs." | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "quMM-7cWzljA", | |
colab_type: "code", | |
colab: { } | |
}, | |
source: [ | |
"%matplotlib inline ", | |
"import matplotlib.pyplot as plt ", | |
"import matplotlib.image as mpimg" | |
], | |
execution_count: 0, | |
outputs: [ ] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "63OD4nSYztFQ", | |
colab_type: "code", | |
outputId: "b83b4bea-55a3-4c6a-b4f4-02f0e82faa48", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 248 | |
} | |
}, | |
source: [ | |
"plt.axis('off') ", | |
"imgplot = plt.imshow(img)" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "display_data", | |
data: { | |
image/png: "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0 dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAACy0lEQVR4nO3YMQoDMQwAwdOR/39Z+YBJF7zFTCk3 ahaBZ3cfoOe9vQBwJk6IEidEiROixAlRn1+PM+MrF/5sd+c0dzkhSpwQJU6IEidEiROixAlR4oQo cUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6I EidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKE KHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVO iBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHi hChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAl TogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR 4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQ JU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJ UeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqc ECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LE CVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghanb39g7AgcsJUeKEKHFClDghSpwQJU6I +gI34gvJPjrjHQAAAABJRU5ErkJggg== ", | |
text/plain: [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
} | |
} | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "9lk3cB8X0491", | |
colab_type: "text" | |
}, | |
source: [ | |
"Now in photoshop, the first thing our designer wants is to start with a solid red color. If we revisit the shape of our image, we see we have 3 2x2 images, where each of the three images represents one channel." | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "QBapW6CoFF-l", | |
colab_type: "code", | |
outputId: "863544da-7931-4967-bb82-e0f701a27e75", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 34 | |
} | |
}, | |
source: [ | |
"img.shape" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "execute_result", | |
data: { | |
text/plain: [ | |
"(2, 2, 3)" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
}, | |
execution_count: 30 | |
} | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "nAhuwy9XFKCf", | |
colab_type: "text" | |
}, | |
source: [ | |
"So if we want a red image, we should be able to change the first channel to `255` while leaving the others `0`. Let's try it out." | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "OLLKLWNGxkcn", | |
colab_type: "code", | |
outputId: "de162fae-6768-47b1-8bfa-1fa9cd8565e5", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 248 | |
} | |
}, | |
source: [ | |
"img[:,:,0] = 255 ", | |
"plt.axis('off') ", | |
"imgplot = plt.imshow(img)" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "display_data", | |
data: { | |
image/png: "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0 dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAACyklEQVR4nO3YMQoDMQwAwdOR/39Z+YBJF7zFTCk3 ahaBZ3cfoOe9vQBwJk6IEidEiROixAlRn5+vM75y4d925zR2OSFKnBAlTogSJ0SJE6LECVHihChx QpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogS J0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQo cUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6I EidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKE KHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVO iBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHi hChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAl TogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR 4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQ JU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJ UeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFqdvf2DsCBywlR4oQocUKUOCFKnBAlToj6 Ao0ECskCjd1oAAAAAElFTkSuQmCC ", | |
text/plain: [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
} | |
} | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "rPyvcjri1ygb", | |
colab_type: "text" | |
}, | |
source: [ | |
"Oh, but our designer just came to us and said she wanted to start with a black image instead. Well, no problem, we could make a white image by changing all the channels to `255` " | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "Q_Pn1BIk1vlz", | |
colab_type: "code", | |
outputId: "6829d81c-5f64-4fb6-e199-3d07ea67528b", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 248 | |
} | |
}, | |
source: [ | |
"img[:,:,:] = 0 ", | |
"plt.axis('off') ", | |
"imgplot = plt.imshow(img)" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "display_data", | |
data: { | |
image/png: "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0 dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAACy0lEQVR4nO3YMQoDMQwAwdOR/39Z+YBJF7zFTCk3 ahaBZ3cfoOe9vQBwJk6IEidEiROixAlRn1+PM+MrF/5sd+c0dzkhSpwQJU6IEidEiROixAlR4oQo cUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6I EidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKE KHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVO iBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHi hChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAl TogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR 4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghSpwQ JU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqcECVOiBInRIkTosQJ UeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LECVHihChxQpQ4IUqc ECVOiBInRIkTosQJUeKEKHFClDghSpwQJU6IEidEiROixAlR4oQocUKUOCFKnBAlTogSJ0SJE6LE CVHihChxQpQ4IUqcECVOiBInRIkTosQJUeKEKHFClDghanb39g7AgcsJUeKEKHFClDghSpwQJU6I +gI34gvJPjrjHQAAAABJRU5ErkJggg== ", | |
text/plain: [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
} | |
} | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "m-XAJQna1nzo", | |
colab_type: "text" | |
}, | |
source: [ | |
"But now let's say she changes her mind, as designers often do. She says she wants an addition on the red channel of `100`. How do we do that? ", | |
" ", | |
"We can tell `numpy` to subtract a value, `100` on each element of the matrix, or each pixel on the channel of the image with `np.add`" | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "l8nAWIvWpuPM", | |
colab_type: "code", | |
outputId: "7c13c05e-3fbe-4db3-e3fa-5bae8db1e8aa", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 102 | |
} | |
}, | |
source: [ | |
"red_channel_values = np.add(img[:,:, 0], 100) ", | |
"img[:,:,0] = red_channel_values ", | |
"img" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "execute_result", | |
data: { | |
text/plain: [ | |
"array([[[100, 0, 0], ", | |
" [100, 0, 0]], ", | |
" ", | |
" [[100, 0, 0], ", | |
" [100, 0, 0]]], dtype=uint8)" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
}, | |
execution_count: 33 | |
} | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "oHhWH-egpyqD", | |
colab_type: "code", | |
outputId: "568aea24-9581-4bd0-e456-c843e5b6036a", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 269 | |
} | |
}, | |
source: [ | |
"imgplot = plt.imshow(img)" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "display_data", | |
data: { | |
image/png: "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 MMgAAAAASUVORK5CYII= ", | |
text/plain: [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
} | |
} | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "R_r9mcE-3pCi", | |
colab_type: "text" | |
}, | |
source: [ | |
"Now let's say she now wants the top half of the image to have an addition of 100 to the red channel. We can access the top row of the image by looking at the dimensions from before `[2,2,3]` and thinking of it in terms of `[rows, columns, channels]` So if we want to change the top row of the image, we need to access row `0` (top) which will leave row `1` (bottom) untouched." | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "Pt41-F8dp4aD", | |
colab_type: "code", | |
outputId: "dbcbbc25-65b1-4d32-b64b-470e4f67156f", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 102 | |
} | |
}, | |
source: [ | |
"img[0,:,0] = np.add(img[0,:,0], 100) ", | |
"img" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "execute_result", | |
data: { | |
text/plain: [ | |
"array([[[200, 0, 0], ", | |
" [200, 0, 0]], ", | |
" ", | |
" [[100, 0, 0], ", | |
" [100, 0, 0]]], dtype=uint8)" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
}, | |
execution_count: 39 | |
} | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "S1eaud_2p84D", | |
colab_type: "code", | |
outputId: "d8d239a5-a71e-4946-f085-1489a1be3398", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 269 | |
} | |
}, | |
source: [ | |
"imgplot = plt.imshow(img)" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "display_data", | |
data: { | |
image/png: "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 TkSuQmCC ", | |
text/plain: [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
} | |
} | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "1WWipip65tGb", | |
colab_type: "text" | |
}, | |
source: [ | |
"So finally, she says she loves it, but just wants to increase the intensity of all values by 1. There are 2 ways to do this and we'll try both. ", | |
" ", | |
" ", | |
"* The first way is to create a matrix of the same shape and simply add it ", | |
"* The second way is to add the value `1` ", | |
" ", | |
"Then finally, we check the equality using `np.equal`" | |
] | |
}, | |
{ | |
cell_type: "code", | |
metadata: { | |
id: "ENZyEV0H4HmN", | |
colab_type: "code", | |
outputId: "55632633-ce17-4f8d-acad-cd884aa6471b", | |
colab: { | |
base_uri: "https://localhost:8080/", | |
height: 102 | |
} | |
}, | |
source: [ | |
"one_matrix = np.ones([2,2,3],dtype=np.uint8) ", | |
"img_one_matrix = img + one_matrix ", | |
" ", | |
"img_one_scaler = img + 1 ", | |
"img_one_scaler ", | |
" ", | |
"np.equal(img_one_matrix, img_one_scaler)" | |
], | |
execution_count: 0, | |
outputs: [ | |
{ | |
output_type: "execute_result", | |
data: { | |
text/plain: [ | |
"array([[[ True, True, True], ", | |
" [ True, True, True]], ", | |
" ", | |
" [[ True, True, True], ", | |
" [ True, True, True]]])" | |
] | |
}, | |
metadata: { | |
tags: [ ] | |
}, | |
execution_count: 46 | |
} | |
] | |
}, | |
{ | |
cell_type: "markdown", | |
metadata: { | |
id: "8KtDqe93-yS-", | |
colab_type: "text" | |
}, | |
source: [ | |
"## Troubleshooting Advice ", | |
" ", | |
"Now let's say we have a typo and have a typo and try to add two matrixes of different shapes. When that happens, we have what is called a shape mismatch. If something like that happens, you need to print the `.shape` of each matrix and find out what is different. Try it for yourself. That is the best way to learn. ", | |
" " | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment