Skip to content

Instantly share code, notes, and snippets.

@ka-pr
Created November 14, 2019 13:37
Show Gist options
  • Save ka-pr/8b109cdebba3bb09b74b570e2ae6595c to your computer and use it in GitHub Desktop.
Save ka-pr/8b109cdebba3bb09b74b570e2ae6595c to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Short introduction to numpy and matplotlib"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Numpy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Loading the package"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The numpy package includes many powerful tools for mathematical operations such as calculating square roots, logarithms, and exponential functions, but also more advanced methods like the fourier transform etc. The most important feature of Numpy is the \"numpy array\" which allows us to perform matrix calculus. \"numpy arrays\" are therefore almost always preferred over \"lists\". "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since numpy is not a part of \"core python\", we first have to import all its functions and objects via the \"import\" method:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now use all functions and methods from numpy, for example the \"sqrt\" function in this notebook:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2.0"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"numpy.sqrt(4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we use functions that are not part of \"core python\" we always have to define which package this function shall be imported from. In the example above, we tell the computer to load the function \"sqrt\" from the numpy package. We can think of this as a \"path\" to a file on a computer."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since we are lazy and don't want to type \"numpy\" all the time we use a numpy functions, there is a convenient way to define an \"alias\":"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2.0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sqrt(4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculating with numpy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's create two 3x3 numpy arrays:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1 2 3]\n",
" [4 5 6]\n",
" [7 8 9]]\n",
"[[10 11 12]\n",
" [13 14 15]\n",
" [16 17 18]]\n"
]
}
],
"source": [
"matrix_a = np.array([[1,2,3], [4,5,6], [7,8,9]])\n",
"matrix_b = np.array([[10,11,12], [13,14,15], [16,17,18]])\n",
"print(matrix_a)\n",
"print(matrix_b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Numpy arrays allow for elementwise mathematical operations:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[11 13 15]\n",
" [17 19 21]\n",
" [23 25 27]]\n",
"[[ 10 22 36]\n",
" [ 52 70 90]\n",
" [112 136 162]]\n"
]
}
],
"source": [
"matrix_sum = matrix_a + matrix_b\n",
"dot_product = matrix_a * matrix_b\n",
"\n",
"print(matrix_sum)\n",
"print(dot_product)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For a true matrix multiplication, we use the \"@\" operator instead:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 84 90 96]\n",
" [201 216 231]\n",
" [318 342 366]]\n"
]
}
],
"source": [
"matrix_product = matrix_a @ matrix_b\n",
"print(matrix_product)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Some more handy functions:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"zeros = np.zeros((3,3)) # Create a 3x3 array filled with zeros\n",
"ones = np.ones((3,3)) # Create a 3x3 array filled with ones\n",
"natural_logarithm = np.log(5) # Calculate the natural logarithm \n",
"decadic_logarithm = np.log10(5) # Calculate the decadic logarithm\n",
"exponential = np.exp(5) # Calculate exponential function\n",
"pi = np.pi # Value of pi\n",
"equidistant_spaced_vector = np.linspace(0,10,11) # Create an equidistantly spaced vector from 0 to 10 with 11 elements"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This was just a short introduction. Numpy is one of the most powerful toolboxes for python. Feel free to further explore it. If you want to do any mathematical operation, there is probably a function in numpy to do it!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Matplotlib"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib is a powerful toolbox for data visualisation of any kind. We here shortly discuss some basic functions of the sub-package \"pyplot\".\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Firt we have to import the \"pyplot\" package and give it a handy \"alias\":"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, let us produce a simple figure of a sine and a cosine curve. Let's first do the math using numpy:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"x = np.linspace(0,4*np.pi,50)\n",
"sin = np.sin(x)\n",
"cos = np.cos(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We just created an equidistantly spaced vector from 0 to 4pi and used the \"np.sin\" and \"np.cos\" funtions to calculate the sine and cosine."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's now visualise our data:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"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": [
"fig, ax = plt.subplots(1) # Create a figure object and a set of axes within it\n",
"ax.plot(x, sin, label='sin') # Plot our data as lines\n",
"ax.plot(x, cos, label='cos')\n",
"\n",
"ax.scatter(x, sin) # Plot our data as dots\n",
"ax.scatter(x, cos)\n",
"\n",
"ax.set_xlabel('X') # Set the label for the x-axis\n",
"ax.set_ylabel('Y') # Set the label for the y-axis\n",
"ax.set_title('Trogonometric functions') # Set the figure title\n",
"ax.grid() # Create an axes grid in the background\n",
"ax.legend() # Add a legend. The labels are taken from the code in line 2 and line 3!\n",
"plt.show() # Display the figure (Not needed in jupyter-notebook)"
]
},
{
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment