Skip to content

Instantly share code, notes, and snippets.

@praisethemoon
Last active August 17, 2020 13:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save praisethemoon/974b558c7bd0e8bc14b67a57b046eba2 to your computer and use it in GitHub Desktop.
Save praisethemoon/974b558c7bd0e8bc14b67a57b046eba2 to your computer and use it in GitHub Desktop.
Simple Matrix Convolution - Iterative Edition
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"M = np.array([[0.5, 1, 0.55, 0.12, 0.1, 1],\n",
" [0.3, 0.34, 0.3, 0.99, 0, 0],\n",
" [0, 0, 0.1, 0.05, 0.1, 1],\n",
" [1, 0.1, 0.1, 0.3, 0.4, 0.43],\n",
" [0, 1, 0.4, 0.4, 0.4, 0.44],\n",
" [0.1, 0.1, 0.13, 0.44, 0.54, 0]])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x11c265940>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(M)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(6, 6)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M.shape"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"K = np.array([[1, 0, -1],[1, 0, -1],[1, 0, -1]])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3, 3)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"K.shape"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x11c3d9d68>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(K)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([[0.5 , 1. , 0.55, 0.12, 0.1 , 1. ],\n",
" [0.3 , 0.34, 0.3 , 0.99, 0. , 0. ],\n",
" [0. , 0. , 0.1 , 0.05, 0.1 , 1. ],\n",
" [1. , 0.1 , 0.1 , 0.3 , 0.4 , 0.43],\n",
" [0. , 1. , 0.4 , 0.4 , 0.4 , 0.44],\n",
" [0.1 , 0.1 , 0.13, 0.44, 0.54, 0. ]]), array([[ 1, 0, -1],\n",
" [ 1, 0, -1],\n",
" [ 1, 0, -1]]))"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M, K"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def conv(M, K, s = (1, 1)):\n",
" m = M.shape[0]\n",
" m_ = K.shape[0]\n",
" n = M.shape[1]\n",
" n_ = K.shape[1]\n",
" \n",
" output_shape = (((int)((m - m_)/s[0] + 1), (int)((n - n_)/s[1] + 1)))\n",
" \n",
" C = np.zeros((output_shape))\n",
" for i in range(output_shape[0]):\n",
" for j in range(output_shape[1]):\n",
" value = 0\n",
" \n",
" for v in range(K.shape[0]):\n",
" for w in range(K.shape[1]):\n",
" value += K[v][w] * M[i*s[0] + v][j*s[1]+w]\n",
" C[i][j] = value\n",
" return C"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"C = conv(M, K)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x11c466630>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(C)"
]
},
{
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment