{ "cells": [ { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## How to start coding using Python language:\n", "\n", "1. Using Anaconda distribution: Download and install Anaconda from [here](https://www.anaconda.com/products/distribution). Install and lunch jupyter-notebook or jupyterlab from there.\n", "\n", "2. Using jupyterhub with you Aalto email address from [here](https://scicomp.aalto.fi/aalto/jupyterhub/).\n", "\n", "3. Google colab\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Exercise 1. Array creation and accessing elements in an array\n", "Create a 2d array (a matrix) $\\mathbf{M}$ of shape (3, 2), containing 6 values.\n", "\n", "Access element in the second row and first column.\n", "\n", "Access the second row of the matrix and name it $\\mathbf{v}$. What is the shape of this vector?\n", "\n", "Compute the Matrix-Vector multiplication of $\\mathbf{v}$ and $\\mathbf{M}$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2],\n", " [4, 5],\n", " [6, 9]])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = np.array([[1, 2], [4, 5], [6, 9]])\n", "M" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M[1, 0]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4, 5])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = M[1]\n", "v" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2,)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v.shape" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([14, 41, 69])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M @ v" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Exercise 2.\n", "Find the Euclidean norm of a vector (1d array) using NumPy\n", "\n", "$\\|{\\mathbf{x}}_2\\| = \\sqrt{\\sum_{i=1}^n x_i^2}$" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.729746940310715" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def euclidean_norm_numpy(x):\n", " res = np.sqrt(np.sum(x**2))\n", " return res\n", "\n", "my_vector = np.array([0.5, -1.2, 3.3, 4.5])\n", "euclidean_norm_numpy(my_vector)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.729746940310715" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(my_vector)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 3.\n", "Write a function that computes the Euclidean norms of a matrix (2d array) in a row-wise fashion. Hint: use the axis argument of np.sum.\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def euclidean_norm_2d(X):\n", " norm_X = np.sqrt(np.sum(X**2 , axis =1))\n", " return norm_X\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4.68401537, 4.59782557])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_matrix = np.array([[0.5, -1.2, 4.5],\n", " [-3.2, 1.9, 2.7]])\n", "# Should return an array of size 2.\n", "euclidean_norm_2d(my_matrix)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4.68401537, 4.59782557])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# another way\n", "np.linalg.norm(my_matrix, axis =1)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Exercise 4. Solving linear equations\n", "Consider the problem of solving $\\mathbf{A} \\mathbf{x} = \\mathbf{b}$.\n", "\\begin{align*}\n", " 2 x_1 + 3 x_2 + 4 x_3 &= 19\\\\\n", " 4 x_1 + 11 x_2 + 14 x_3 &= 55\\\\\n", " 2 x_1 + 8 x_2 + 17 x_3 &= 50\n", "\\end{align*}\n", "In the lecture slides, we found $\\mathbf{x}$ using Gaussian elimination method. The solution was $\\mathbf{x} = \\begin{bmatrix} 4 \\\\ 1\\\\ 2 \\end{bmatrix}$.\n", "\n", "Write a numpy code for solving $\\mathbf{x}$\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "array([[19],\n", " [55],\n", " [50]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[2, 3, 4], [4, 11, 14], [2, 8, 17]])\n", "b = np.array([[19, 55, 50]]).T\n", "b" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "array([[4.],\n", " [1.],\n", " [2.]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.inv(A) @ b" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "array([[4.],\n", " [1.],\n", " [2.]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.solve(A, b) # numerically more stable" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Exercise 5. Compute Jacobian\n", "\n", "For the $\\mathbf{f}: \\mathbb{R}^2 \\rightarrow \\mathbb{R}^2$ and the vector $\\mathbf{x} =\\begin{bmatrix} x_1 \\\\ x_2 \\end{bmatrix}$\n", " we have the vector-value function as $f = \\begin{bmatrix} x_1^2 x_2 \\\\ 5 x_1 + \\sin{x_2} \\end{bmatrix}$. We want to find the jacobian of $\\mathbf{f}$.\n", " \n", "We have $f_1(\\mathbf{x}) = x_1^2 x_2$ and $f_2(\\mathbf{x}) = 5 x_1 + \\sin{x_2}$\n", "\n", "Jacobian is: \n", "\\begin{equation*}\n", " \\mathbf{F}_{\\mathbf{x}}(\\mathbf{x}) = \\begin{bmatrix} \\frac{\\partial \\mathbf{f(\\mathbf{x})}}{\\partial{x_1}} & \\frac{\\partial \\mathbf{f(\\mathbf{x})}}{\\partial {x_2}} \\end{bmatrix} = \\begin{bmatrix} \\frac{\\partial {f_1(\\mathbf{x})}}{\\partial{x_1}} & \\frac{\\partial {f_1(\\mathbf{x})}}{\\partial{x_2}} \\\\ \\frac{\\partial {f_2(\\mathbf{x})}}{\\partial{x_1}} & \\frac{\\partial {f_2(\\mathbf{x})}}{\\partial{x_2}} \\end{bmatrix} = \n", "\\begin{bmatrix} 2x_1 x_2 & x_1^2 \\\\ 5 & \\cos(x_2)\\end{bmatrix}\n", "\\end{equation*}\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "x = np.array([1. , 0])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def f_function(x):\n", " x_1 = x[0]\n", " x_2 = x[1]\n", " f = np.array([[x_1**2 * x_2],\n", " [5*x_1 + np.sin(x_2)]])\n", " return f\n", "\n", "def F_function(x):\n", " x_1 = x[0]\n", " x_2 = x[1]\n", " F = np.array([[2*x_1*x_2, x_1**2], \n", " [5, np.cos(x_2)]])\n", " return F\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "array([[0., 1.],\n", " [5., 1.]])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F_function(x)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import autograd.numpy as np # Thinly-wrapped version of Numpy # install it: pip install autograd\n", "from autograd import jacobian" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "array([[[0., 1.]],\n", "\n", " [[5., 1.]]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jacobian(f_function)(x)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Matplotlib" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Matplotlib is a plotting library for Python" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "from matplotlib import pyplot as plt" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "