{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial on Python for scientific computing\n", "\n", "> Marcos Duarte, Renato Naville Watanabe \n", "> [Laboratory of Biomechanics and Motor Control](http://pesquisa.ufabc.edu.br/bmclab) \n", "> Federal University of ABC, Brazil\n", "\n", "

A Jupyter Notebook

" ] }, { "cell_type": "markdown", "metadata": { "toc": true }, "source": [ "

Contents

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Scope of this tutorial\n", "\n", "This will be a very brief tutorial on Python. \n", "For a more complete tutorial about Python see [A Whirlwind Tour of Python](https://github.com/jakevdp/WhirlwindTourOfPython) and [Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/) for a specific tutorial about Python for scientific computing.\n", "\n", "To use Python for scientific computing we need the Python program itself with its main modules and specific packages for scientific computing. [See this notebook on how to install Python for scientific computing](http://nbviewer.ipython.org/github/demotu/BMC/blob/master/notebooks/PythonInstallation.ipynb). \n", "Once you get Python and the necessary packages for scientific computing ready to work, there are different ways to run Python, the main ones are:\n", "\n", "- open a terminal window in your computer and type `python` or `ipython` that the Python interpreter will start\n", "- run the `Jupyter notebook` and start working with Python in a browser\n", "- run `Spyder`, an interactive development environment (IDE)\n", "- run the `Jupyter qtconsole`, a more featured terminal\n", "- run Python online in a website such as [https://www.pythonanywhere.com/](https://www.pythonanywhere.com/) or [Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb)\n", "- run Python using any other Python editor or IDE\n", " \n", "We will use the Jupyter Notebook for this tutorial but you can run almost all the things we will see here using the other forms listed above." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python as a calculator\n", "\n", "Once in the Jupyter notebook, if you type a simple mathematical expression and press `Shift+Enter` it will give the result of the expression:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-22" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 + 2 - 25" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5714285714285714" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "4/7" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the `print` function, let's explore the mathematical operations available in Python:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "sl_translate": "sl_none" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1+2 = 3\n", "4*5 = 20\n", "6/7 = 0.8571428571428571\n", "8**2 = 64\n" ] } ], "source": [ "print('1+2 = ', 1+2, '\\n', '4*5 = ', 4*5, '\\n', '6/7 = ', 6/7, '\\n', '8**2 = ', 8**2, sep='')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And if we want the square-root of a number:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'sqrt' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m9\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'sqrt' is not defined" ] } ], "source": [ "sqrt(9)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We get an error message saying that the `sqrt` function if not defined. This is because `sqrt` and other mathematical functions are available with the `math` module:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import math" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.sqrt(9)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "from math import sqrt" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sqrt(9)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The import function\n", "\n", "We used the command '`import`' to be able to call certain functions. In Python functions are organized in modules and packages and they have to be imported in order to be used. \n", "\n", "A module is a file containing Python definitions (e.g., functions) and statements. Packages are a way of structuring Python’s module namespace by using “dotted module names”. For example, the module name A.B designates a submodule named B in a package named A. To be used, modules and packages have to be imported in Python with the import function. \n", "\n", "Namespace is a container for a set of identifiers (names), and allows the disambiguation of homonym identifiers residing in different namespaces. For example, with the command import math, we will have all the functions and statements defined in this module in the namespace '`math.`', for example, '`math.pi`' is the π constant and '`math.cos()`', the cosine function." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By the way, to know which Python version you are running, we can use one of the following modules:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'3.7.6 (default, Jan 8 2020, 19:59:22) \\n[GCC 7.3.0]'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sys\n", "sys.version" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And if you are in an IPython session:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'commit_hash': '8bda98619',\n", " 'commit_source': 'installation',\n", " 'default_encoding': 'UTF-8',\n", " 'ipython_path': '/home/marcos/miniconda3/lib/python3.7/site-packages/IPython',\n", " 'ipython_version': '7.12.0',\n", " 'os_name': 'posix',\n", " 'platform': 'Linux-5.3.0-29-generic-x86_64-with-debian-buster-sid',\n", " 'sys_executable': '/home/marcos/miniconda3/bin/python',\n", " 'sys_platform': 'linux',\n", " 'sys_version': '3.7.6 (default, Jan 8 2020, 19:59:22) \\n[GCC 7.3.0]'}\n" ] } ], "source": [ "from IPython import sys_info\n", "print(sys_info())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first option gives information about the Python version; the latter also includes the IPython version, operating system, etc." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Object-oriented programming\n", "\n", "Python is designed as an object-oriented programming (OOP) language. OOP is a paradigm that represents concepts as \"objects\" that have data fields (attributes that describe the object) and associated procedures known as methods.\n", "\n", "This means that all elements in Python are objects and they have attributes which can be acessed with the dot (.) operator after the name of the object. We already experimented with that when we imported the module `sys`, it became an object, and we acessed one of its attribute: `sys.version`.\n", "\n", "OOP as a paradigm is much more than defining objects, attributes, and methods, but for now this is enough to get going with Python." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python and IPython help\n", "\n", "To get help about any Python command, use `help()`:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function degrees in module math:\n", "\n", "degrees(x, /)\n", " Convert angle x from radians to degrees.\n", "\n" ] } ], "source": [ "help(math.degrees)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or if you are in the IPython environment, simply add '?' to the function that a window will open at the bottom of your browser with the same help content:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdegrees\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m Convert angle x from radians to degrees.\n", "\u001b[0;31mType:\u001b[0m builtin_function_or_method\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "math.degrees?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And if you add a second '?' to the statement you get access to the original script file of the function (an advantage of an open source language), unless that function is a built-in function that does not have a script file, which is the case of the standard modules in Python (but you can access the Python source code if you want; it just does not come with the standard program for installation).\n", "\n", "So, let's see this feature with another function:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mscipy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfftpack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moverwrite_x\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mSource:\u001b[0m \n", "\u001b[0;32mdef\u001b[0m \u001b[0mfft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moverwrite_x\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"\u001b[0m\n", "\u001b[0;34m Return discrete Fourier transform of real or complex sequence.\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m The returned complex array contains ``y(0), y(1),..., y(n-1)`` where\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m ``y(j) = (x * exp(-2*pi*sqrt(-1)*j*np.arange(n)/n)).sum()``.\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m Parameters\u001b[0m\n", "\u001b[0;34m ----------\u001b[0m\n", "\u001b[0;34m x : array_like\u001b[0m\n", "\u001b[0;34m Array to Fourier transform.\u001b[0m\n", "\u001b[0;34m n : int, optional\u001b[0m\n", "\u001b[0;34m Length of the Fourier transform. If ``n < x.shape[axis]``, `x` is\u001b[0m\n", "\u001b[0;34m truncated. If ``n > x.shape[axis]``, `x` is zero-padded. The\u001b[0m\n", "\u001b[0;34m default results in ``n = x.shape[axis]``.\u001b[0m\n", "\u001b[0;34m axis : int, optional\u001b[0m\n", "\u001b[0;34m Axis along which the fft's are computed; the default is over the\u001b[0m\n", "\u001b[0;34m last axis (i.e., ``axis=-1``).\u001b[0m\n", "\u001b[0;34m overwrite_x : bool, optional\u001b[0m\n", "\u001b[0;34m If True, the contents of `x` can be destroyed; the default is False.\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m Returns\u001b[0m\n", "\u001b[0;34m -------\u001b[0m\n", "\u001b[0;34m z : complex ndarray\u001b[0m\n", "\u001b[0;34m with the elements::\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m [y(0),y(1),..,y(n/2),y(1-n/2),...,y(-1)] if n is even\u001b[0m\n", "\u001b[0;34m [y(0),y(1),..,y((n-1)/2),y(-(n-1)/2),...,y(-1)] if n is odd\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m where::\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m y(j) = sum[k=0..n-1] x[k] * exp(-sqrt(-1)*j*k* 2*pi/n), j = 0..n-1\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m See Also\u001b[0m\n", "\u001b[0;34m --------\u001b[0m\n", "\u001b[0;34m ifft : Inverse FFT\u001b[0m\n", "\u001b[0;34m rfft : FFT of a real sequence\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m Notes\u001b[0m\n", "\u001b[0;34m -----\u001b[0m\n", "\u001b[0;34m The packing of the result is \"standard\": If ``A = fft(a, n)``, then\u001b[0m\n", "\u001b[0;34m ``A[0]`` contains the zero-frequency term, ``A[1:n/2]`` contains the\u001b[0m\n", "\u001b[0;34m positive-frequency terms, and ``A[n/2:]`` contains the negative-frequency\u001b[0m\n", "\u001b[0;34m terms, in order of decreasingly negative frequency. So for an 8-point\u001b[0m\n", "\u001b[0;34m transform, the frequencies of the result are [0, 1, 2, 3, -4, -3, -2, -1].\u001b[0m\n", "\u001b[0;34m To rearrange the fft output so that the zero-frequency component is\u001b[0m\n", "\u001b[0;34m centered, like [-4, -3, -2, -1, 0, 1, 2, 3], use `fftshift`.\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m Both single and double precision routines are implemented. Half precision\u001b[0m\n", "\u001b[0;34m inputs will be converted to single precision. Non floating-point inputs\u001b[0m\n", "\u001b[0;34m will be converted to double precision. Long-double precision inputs are\u001b[0m\n", "\u001b[0;34m not supported.\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m This function is most efficient when `n` is a power of two, and least\u001b[0m\n", "\u001b[0;34m efficient when `n` is prime.\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m Note that if ``x`` is real-valued then ``A[j] == A[n-j].conjugate()``.\u001b[0m\n", "\u001b[0;34m If ``x`` is real-valued and ``n`` is even then ``A[n/2]`` is real.\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m If the data type of `x` is real, a \"real FFT\" algorithm is automatically\u001b[0m\n", "\u001b[0;34m used, which roughly halves the computation time. To increase efficiency\u001b[0m\n", "\u001b[0;34m a little further, use `rfft`, which does the same calculation, but only\u001b[0m\n", "\u001b[0;34m outputs half of the symmetrical spectrum. If the data is both real and\u001b[0m\n", "\u001b[0;34m symmetrical, the `dct` can again double the efficiency, by generating\u001b[0m\n", "\u001b[0;34m half of the spectrum from half of the signal.\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m Examples\u001b[0m\n", "\u001b[0;34m --------\u001b[0m\n", "\u001b[0;34m >>> from scipy.fftpack import fft, ifft\u001b[0m\n", "\u001b[0;34m >>> x = np.arange(5)\u001b[0m\n", "\u001b[0;34m >>> np.allclose(fft(ifft(x)), x, atol=1e-15) # within numerical accuracy.\u001b[0m\n", "\u001b[0;34m True\u001b[0m\n", "\u001b[0;34m\u001b[0m\n", "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_pocketfft\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moverwrite_x\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mFile:\u001b[0m ~/miniconda3/lib/python3.7/site-packages/scipy/fftpack/basic.py\n", "\u001b[0;31mType:\u001b[0m function\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import scipy.fftpack\n", "scipy.fftpack.fft??" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To know all the attributes of an object, for example all the functions available in `math`, we can use the function `dir`:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']\n" ] } ], "source": [ "print(dir(math))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tab completion in IPython\n", "\n", "IPython has tab completion: start typing the name of the command (object) and press `tab` to see the names of objects available with these initials letters. When the name of the object is typed followed by a dot (`math.`), pressing `tab` will show all available attribites, scroll down to the desired attribute and press `Enter` to select it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The four most helpful commands in IPython\n", "\n", "These are the most helpful commands in IPython (from [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html)):\n", "\n", " - `?` : Introduction and overview of IPython’s features.\n", " - `%quickref` : Quick reference.\n", " - `help` : Python’s own help system.\n", " - `object?` : Details about ‘object’, use ‘object??’ for extra details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comments\n", "\n", "Comments in Python start with the hash character, #, and extend to the end of the physical line:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.141592653589793" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Import the math library to access more math stuff\n", "import math\n", "math.pi # this is the pi constant; a useless comment since this is obvious" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To insert comments spanning more than one line, use a multi-line string with a pair of matching triple-quotes: `\"\"\"` or `'''` (we will see the string data type later). A typical use of a multi-line comment is as documentation strings and are meant for anyone reading the code:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Documentation strings are typically written like that.\\n\\nA docstring is a string literal that occurs as the first statement\\nin a module, function, class, or method definition.\\n\\n'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\"\"Documentation strings are typically written like that.\n", "\n", "A docstring is a string literal that occurs as the first statement\n", "in a module, function, class, or method definition.\n", "\n", "\"\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A docstring like above is useless and its output as a standalone statement looks uggly in IPython Notebook, but you will see its real importance when reading and writting codes.\n", "\n", "Commenting a programming code is an important step to make the code more readable, which Python cares a lot. \n", "There is a style guide for writting Python code ([PEP 8](https://www.python.org/dev/peps/pep-0008/)) with a session about [how to write comments](https://www.python.org/dev/peps/pep-0008/#comments)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Magic functions\n", "\n", "IPython has a set of predefined ‘magic functions’ that you can call with a command line style syntax. \n", "There are two kinds of magics, line-oriented and cell-oriented. \n", "Line magics are prefixed with the % character and work much like OS command-line calls: they get as an argument the rest of the line, where arguments are passed without parentheses or quotes. \n", "Cell magics are prefixed with a double %%, and they are functions that get as an argument not only the rest of the line, but also the lines below it in a separate argument." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Assignment and expressions\n", "\n", "The equal sign ('=') is used to assign a value to a variable. Afterwards, no result is displayed before the next interactive prompt:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "x = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Spaces between the statements are optional but it helps for readability.\n", "\n", "To see the value of the variable, call it again or use the print function:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, the last assignment is that holds:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = 2\n", "x = 3\n", "x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In mathematics '=' is the symbol for identity, but in computer programming '=' is used for assignment, it means that the right part of the expresssion is assigned to its left part. \n", "For example, 'x=x+1' does not make sense in mathematics but it does in computer programming:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n" ] } ], "source": [ "x = x + 1\n", "print(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A value can be assigned to several variables simultaneously:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "4\n" ] } ], "source": [ "x = y = 4\n", "print(x)\n", "print(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Several values can be assigned to several variables at once:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "6\n" ] } ], "source": [ "x, y = 5, 6\n", "print(x)\n", "print(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And with that, you can do (!):" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6\n", "5\n" ] } ], "source": [ "x, y = y, x\n", "print(x)\n", "print(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Variables must be “defined” (assigned a value) before they can be used, or an error will occur:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'z' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mz\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'z' is not defined" ] } ], "source": [ "x = z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Variables and types\n", "\n", "There are different types of built-in objects in Python (and remember that everything in Python is an object):" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['AsyncGeneratorType', 'BuiltinFunctionType', 'BuiltinMethodType', 'ClassMethodDescriptorType', 'CodeType', 'CoroutineType', 'DynamicClassAttribute', 'FrameType', 'FunctionType', 'GeneratorType', 'GetSetDescriptorType', 'LambdaType', 'MappingProxyType', 'MemberDescriptorType', 'MethodDescriptorType', 'MethodType', 'MethodWrapperType', 'ModuleType', 'SimpleNamespace', 'TracebackType', 'WrapperDescriptorType', '_GeneratorWrapper', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_calculate_meta', 'coroutine', 'new_class', 'prepare_class', 'resolve_bases']\n" ] } ], "source": [ "import types\n", "print(dir(types))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see some of them now." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Numbers: int, float, complex\n", "\n", "Numbers can an integer (int), float, and complex (with imaginary part). \n", "Let's use the function `type` to show the type of number (and later for any other object):" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "int" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A float is a non-integer number:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.141592653589793" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.pi" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "float" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(math.pi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python (IPython) is showing `math.pi` with only 15 decimal cases, but internally a float is represented with higher precision. \n", "Floating point numbers in Python are implemented using a double (eight bytes) word; the precison and internal representation of floating point numbers are machine specific and are available in:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sys.float_info" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Be aware that floating-point numbers can be trick in computers:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.30000000000000004" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "0.1 + 0.2" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.551115123125783e-17" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "0.1 + 0.2 - 0.3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These results are not correct (and the problem is not due to Python). The error arises from the fact that floating-point numbers are represented in computer hardware as base 2 (binary) fractions and most decimal fractions cannot be represented exactly as binary fractions. As consequence, decimal floating-point numbers are only approximated by the binary floating-point numbers actually stored in the machine. [See here for more on this issue](http://docs.python.org/2/tutorial/floatingpoint.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A complex number has real and imaginary parts:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1+2j)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1+2j" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "print(type(1+2j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each part of a complex number is represented as a floating-point number. We can see them using the attributes `.real` and `.imag`:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.0\n", "2.0\n" ] } ], "source": [ "print((1+2j).real)\n", "print((1+2j).imag)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Strings\n", "\n", "Strings can be enclosed in single quotes or double quotes:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'string (str) is a built-in type in Python'" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = 'string (str) is a built-in type in Python'\n", "s" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "str" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "String enclosed with single and double quotes are equal, but it may be easier to use one instead of the other:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 1)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 'string (str) is a Python's built-in type'\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "'string (str) is a Python's built-in type'" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"string (str) is a Python's built-in type\"" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"string (str) is a Python's built-in type\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But you could have done that using the Python escape character '\\':" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"string (str) is a Python's built-in type\"" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'string (str) is a Python\\'s built-in type'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Strings can be concatenated (glued together) with the + operator, and repeated with *:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python\n", "PythonPythonPythonPythonPython\n" ] } ], "source": [ "s = 'P' + 'y' + 't' + 'h' + 'o' + 'n'\n", "print(s)\n", "print(s*5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Strings can be subscripted (indexed); like in C, the first character of a string has subscript (index) 0:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "s[0] = P (s[index], start at 0)\n", "s[5] = n\n", "s[-1] = n (last element)\n", "s[:] = Python (all elements)\n", "s[1:] = ython (from this index (inclusive) till the last (inclusive))\n", "s[2:4] = th (from first index (inclusive) till second index (exclusive))\n", "s[:2] = Py (till this index, exclusive)\n", "s[:10] = Python (Python handles the index if it is larger than the string length)\n", "s[-10:] = Python\n", "s[0:5:2] = Pto (s[ini:end:step])\n", "s[::2] = Pto (s[::step], initial and final indexes can be omitted)\n", "s[0:5:-1] = nohtyP (s[::-step] reverses the string)\n", "s[:2] + s[2:] = Python (because of Python indexing, this sounds natural)\n" ] } ], "source": [ "print('s[0] = ', s[0], ' (s[index], start at 0)')\n", "print('s[5] = ', s[5])\n", "print('s[-1] = ', s[-1], ' (last element)')\n", "print('s[:] = ', s[:], ' (all elements)')\n", "print('s[1:] = ', s[1:], ' (from this index (inclusive) till the last (inclusive))')\n", "print('s[2:4] = ', s[2:4], ' (from first index (inclusive) till second index (exclusive))')\n", "print('s[:2] = ', s[:2], ' (till this index, exclusive)')\n", "print('s[:10] = ', s[:10], ' (Python handles the index if it is larger than the string length)')\n", "print('s[-10:] = ', s[-10:])\n", "print('s[0:5:2] = ', s[0:5:2], ' (s[ini:end:step])')\n", "print('s[::2] = ', s[::2], ' (s[::step], initial and final indexes can be omitted)')\n", "print('s[0:5:-1] = ', s[::-1], ' (s[::-step] reverses the string)')\n", "print('s[:2] + s[2:] = ', s[:2] + s[2:], ' (because of Python indexing, this sounds natural)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### len()\n", "\n", "Python has a built-in functon to get the number of itens of a sequence:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function len in module builtins:\n", "\n", "len(obj, /)\n", " Return the number of items in a container.\n", "\n" ] } ], "source": [ "help(len)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = 'Python'\n", "len(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function len() helps to understand how the backward indexing works in Python. \n", "The index s[-i] should be understood as s[len(s) - i] rather than accessing directly the i-th element from back to front. This is why the last element of a string is s[-1]:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "s = Python\n", "len(s) = 6\n", "len(s)-1 = 5\n", "s[-1] = n\n", "s[len(s) - 1] = n\n" ] } ], "source": [ "print('s = ', s)\n", "print('len(s) = ', len(s))\n", "print('len(s)-1 = ',len(s) - 1)\n", "print('s[-1] = ', s[-1])\n", "print('s[len(s) - 1] = ', s[len(s) - 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or, strings can be surrounded in a pair of matching triple-quotes: \"\"\" or '''. End of lines do not need to be escaped when using triple-quotes, but they will be included in the string. This is how we created a multi-line comment earlier:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Strings can be surrounded in a pair of matching triple-quotes: \"\"\" or \\'\\'\\'.\\n\\nEnd of lines do not need to be escaped when using triple-quotes,\\nbut they will be included in the string.\\n\\n'" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\"\"Strings can be surrounded in a pair of matching triple-quotes: \\\"\"\" or '''.\n", "\n", "End of lines do not need to be escaped when using triple-quotes,\n", "but they will be included in the string.\n", "\n", "\"\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Lists\n", "\n", "Values can be grouped together using different types, one of them is list, which can be written as a list of comma-separated values between square brackets. List items need not all have the same type:" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['spam', 'eggs', 100, 1234]" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = ['spam', 'eggs', 100, 1234]\n", "x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lists can be indexed and the same indexing rules we saw for strings are applied:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'spam'" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function len() works for lists:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tuples\n", "\n", "A tuple consists of a number of values separated by commas, for instance:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('spam', 'eggs', 100, 1234)" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = ('spam', 'eggs', 100, 1234)\n", "t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The type tuple is why multiple assignments in a single line works; elements separated by commas (with or without surrounding parentheses) are a tuple and in an expression with an '=', the right-side tuple is attributed to the left-side tuple: " ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = 1 \n", "b = 2\n" ] } ], "source": [ "a, b = 1, 2\n", "print('a = ', a, '\\nb = ', b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Is the same as:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = 1 \n", "b = 2\n" ] } ], "source": [ "(a, b) = (1, 2)\n", "print('a = ', a, '\\nb = ', b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sets\n", "\n", "Python also includes a data type for sets. A set is an unordered collection with no duplicate elements." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'apple', 'banana', 'orange', 'pear'}" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']\n", "fruit = set(basket) # create a set without duplicates\n", "fruit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As set is an unordered collection, it can not be indexed as lists and tuples." ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(['orange', 'pear', 'apple', 'banana'])\n", "'orange' in fruit # fast membership testing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dictionaries\n", "\n", "Dictionary is a collection of elements organized keys and values. Unlike lists and tuples, which are indexed by a range of numbers, dictionaries are indexed by their keys:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'jack': 4098, 'sape': 4139}" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tel = {'jack': 4098, 'sape': 4139}\n", "tel" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'jack': 4098, 'sape': 4139, 'guido': 4127}" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tel['guido'] = 4127\n", "tel" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4098" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tel['jack']" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'jack': 4098, 'guido': 4127, 'irv': 4127}" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "del tel['sape']\n", "tel['irv'] = 4127\n", "tel" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['jack', 'guido', 'irv'])" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tel.keys()" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'guido' in tel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dict() constructor builds dictionaries directly from sequences of key-value pairs:" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'sape': 4139, 'guido': 4127, 'jack': 4098}" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tel = dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])\n", "tel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Built-in Constants\n", "\n", "- **False** : false value of the bool type\n", "- **True** : true value of the bool type\n", "- **None** : sole value of types.NoneType. None is frequently used to represent the absence of a value." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In computer science, the Boolean or logical data type is composed by two values, true and false, intended to represent the values of logic and Boolean algebra. In Python, 1 and 0 can also be used in most situations as equivalent to the Boolean values." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Logical (Boolean) operators" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### and, or, not" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- **and** : logical AND operator. If both the operands are true then condition becomes true.\t (a and b) is true.\n", "- **or** : logical OR Operator. If any of the two operands are non zero then condition becomes true.\t (a or b) is true.\n", "- **not** : logical NOT Operator. Reverses the logical state of its operand. If a condition is true then logical NOT operator will make false." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comparisons\n", "\n", "The following comparison operations are supported by objects in Python:\n", "\n", "- **==** : equal\n", "- **!=** : not equal\n", "- **<**\t: strictly less than\n", "- **<=** : less than or equal\n", "- **\\>** : strictly greater than\n", "- **\\>=** : greater than or equal\n", "- **is** : object identity\n", "- **is not** : negated object identity" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "True == False" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "not True == False" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 < 2 > 1" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "True != (False or True)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "True != False or True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Indentation and whitespace\n", "\n", "In Python, statement grouping is done by indentation (this is mandatory), which are done by inserting whitespaces, not tabs. Indentation is also recommended for alignment of function calling that span more than one line for better clarity. \n", "We will see examples of indentation in the next session." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Control of flow\n", "\n", "### `if`...`elif`...`else`\n", "\n", "Conditional statements (to peform something if another thing is True or False) can be implemmented using the `if` statement:\n", "```\n", "if expression:\n", " statement\n", "elif:\n", " statement \n", "else:\n", " statement\n", "```\n", "`elif` (one or more) and `else` are optionals. \n", "The indentation is obligatory. \n", "For example:" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "if True:\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Which does nothing useful. \n", "\n", "Let's use the `if`...`elif`...`else` statements to categorize the [body mass index](http://en.wikipedia.org/wiki/Body_mass_index) of a person:" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "# body mass index\n", "weight = 100 # kg\n", "height = 1.70 # m\n", "bmi = weight / height**2" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "For a weight of 100.0 kg and a height of 1.70 m,\n", "the body mass index (bmi) is 34.6 kg/m2,\n", "which is considered moderately obese.\n" ] } ], "source": [ "if bmi < 15:\n", " c = 'very severely underweight'\n", "elif 15 <= bmi < 16:\n", " c = 'severely underweight'\n", "elif 16 <= bmi < 18.5:\n", " c = 'underweight'\n", "elif 18.5 <= bmi < 25:\n", " c = 'normal'\n", "elif 25 <= bmi < 30:\n", " c = 'overweight'\n", "elif 30 <= bmi < 35:\n", " c = 'moderately obese'\n", "elif 35 <= bmi < 40:\n", " c = 'severely obese'\n", "else:\n", " c = 'very severely obese'\n", " \n", "print('For a weight of {0:.1f} kg and a height of {1:.2f} m,\\n\\\n", "the body mass index (bmi) is {2:.1f} kg/m2,\\nwhich is considered {3:s}.'\\\n", " .format(weight, height, bmi, c))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### for\n", "\n", "The `for` statement iterates over a sequence to perform operations (a loop event).\n", "```\n", "for iterating_var in sequence:\n", " statements\n", "```" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3, 2, 1, go!, " ] } ], "source": [ "for i in [3, 2, 1, 'go!']:\n", " print(i, end=', ')" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "P\n", "y\n", "t\n", "h\n", "o\n", "n\n" ] } ], "source": [ "for letter in 'Python':\n", " print(letter)," ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The `range()` function\n", "\n", "The built-in function range() is useful if we need to create a sequence of numbers, for example, to iterate over this list. It generates lists containing arithmetic progressions:" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on class range in module builtins:\n", "\n", "class range(object)\n", " | range(stop) -> range object\n", " | range(start, stop[, step]) -> range object\n", " | \n", " | Return an object that produces a sequence of integers from start (inclusive)\n", " | to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1.\n", " | start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3.\n", " | These are exactly the valid indices for a list of 4 elements.\n", " | When step is given, it specifies the increment (or decrement).\n", " | \n", " | Methods defined here:\n", " | \n", " | __bool__(self, /)\n", " | self != 0\n", " | \n", " | __contains__(self, key, /)\n", " | Return key in self.\n", " | \n", " | __eq__(self, value, /)\n", " | Return self==value.\n", " | \n", " | __ge__(self, value, /)\n", " | Return self>=value.\n", " | \n", " | __getattribute__(self, name, /)\n", " | Return getattr(self, name).\n", " | \n", " | __getitem__(self, key, /)\n", " | Return self[key].\n", " | \n", " | __gt__(self, value, /)\n", " | Return self>value.\n", " | \n", " | __hash__(self, /)\n", " | Return hash(self).\n", " | \n", " | __iter__(self, /)\n", " | Implement iter(self).\n", " | \n", " | __le__(self, value, /)\n", " | Return self<=value.\n", " | \n", " | __len__(self, /)\n", " | Return len(self).\n", " | \n", " | __lt__(self, value, /)\n", " | Return self integer -- return number of occurrences of value\n", " | \n", " | index(...)\n", " | rangeobject.index(value) -> integer -- return index of value.\n", " | Raise ValueError if the value is not present.\n", " | \n", " | ----------------------------------------------------------------------\n", " | Static methods defined here:\n", " | \n", " | __new__(*args, **kwargs) from builtins.type\n", " | Create and return a new object. See help(type) for accurate signature.\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors defined here:\n", " | \n", " | start\n", " | \n", " | step\n", " | \n", " | stop\n", "\n" ] } ], "source": [ "help(range)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "range(0, 10)" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "range(10)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "range(1, 10, 2)" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "range(1, 10, 2)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "4\n", "9\n", "16\n", "25\n", "36\n", "49\n", "64\n", "81\n" ] } ], "source": [ "for i in range(10):\n", " n2 = i**2\n", " print(n2)," ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### while\n", "\n", "The `while` statement is used for repeating sections of code in a loop until a condition is met (this different than the `for` statement which executes n times):\n", "```\n", "while expression:\n", " statement\n", "```\n", "Let's generate the Fibonacci series using a `while` loop:" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 " ] } ], "source": [ "# Fibonacci series: the sum of two elements defines the next\n", "a, b = 0, 1\n", "while b < 1000:\n", " print(b, end=' ')\n", " a, b = b, a+b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Function definition\n", "\n", "A function in a programming language is a piece of code that performs a specific task. Functions are used to reduce duplication of code making easier to reuse it and to decompose complex problems into simpler parts. The use of functions contribute to the clarity of the code.\n", "\n", "A function is created with the `def` keyword and the statements in the block of the function must be indented:" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "def function():\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As per construction, this function does nothing when called:" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "function()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The general syntax of a function definition is:\n", "```\n", "def function_name( parameters ):\n", " \"\"\"Function docstring.\n", "\n", " The help for the function\n", "\n", " \"\"\"\n", "\n", " function body\n", "\n", " return variables\n", "```\n", "A more useful function:" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [], "source": [ "def fibo(N):\n", " \"\"\"Fibonacci series: the sum of two elements defines the next.\n", " \n", " The series is calculated till the input parameter N and\n", " returned as an ouput variable.\n", " \n", " \"\"\"\n", " \n", " a, b, c = 0, 1, []\n", " while b < N:\n", " c.append(b)\n", " a, b = b, a + b\n", " \n", " return c" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fibo(100)" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "teste\n" ] } ], "source": [ "if 3 > 2:\n", " print('teste')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's implemment the body mass index calculus and categorization as a function:" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "def bmi(weight, height):\n", " \"\"\"Body mass index calculus and categorization.\n", " \n", " Enter the weight in kg and the height in m.\n", " See http://en.wikipedia.org/wiki/Body_mass_index\n", " \n", " \"\"\"\n", " \n", " bmi = weight / height**2\n", " \n", " if bmi < 15:\n", " c = 'very severely underweight'\n", " elif 15 <= bmi < 16:\n", " c = 'severely underweight'\n", " elif 16 <= bmi < 18.5:\n", " c = 'underweight'\n", " elif 18.5 <= bmi < 25:\n", " c = 'normal'\n", " elif 25 <= bmi < 30:\n", " c = 'overweight'\n", " elif 30 <= bmi < 35:\n", " c = 'moderately obese'\n", " elif 35 <= bmi < 40:\n", " c = 'severely obese'\n", " else:\n", " c = 'very severely obese'\n", " \n", " s = 'For a weight of {0:.1f} kg and a height of {1:.2f} m,\\\n", " the body mass index (bmi) is {2:.1f} kg/m2,\\\n", " which is considered {3:s}.'\\\n", " .format(weight, height, bmi, c)\n", " \n", " print(s)" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "For a weight of 73.0 kg and a height of 1.70 m, the body mass index (bmi) is 25.3 kg/m2, which is considered overweight.\n" ] } ], "source": [ "bmi(73, 1.70)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numeric data manipulation with Numpy\n", "\n", "Numpy is the fundamental package for scientific computing in Python and has a N-dimensional array package convenient to work with numerical data. With Numpy it's much easier and faster to work with numbers grouped as 1-D arrays (a vector), 2-D arrays (like a table or matrix), or higher dimensions. Let's create 1-D and 2-D arrays in Numpy:" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/plain": [ "array([1, 2, 3, 4, 5, 6])" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1d = np.array([1, 2, 3, 4, 5, 6])\n", "print(type(x1d))\n", "x1d" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3],\n", " [4, 5, 6]])" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2d = np.array([[1, 2, 3], [4, 5, 6]])\n", "x2d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "len() and the Numpy functions size() and shape() give information aboout the number of elements and the structure of the Numpy array:" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1-d array:\n", "[1 2 3 4 5 6]\n", "len(x1d) = 6\n", "np.size(x1d) = 6\n", "np.shape(x1d) = (6,)\n", "np.ndim(x1d) = 1\n", "\n", "2-d array:\n", "[[1 2 3]\n", " [4 5 6]]\n", "len(x2d) = 2\n", "np.size(x2d) = 6\n", "np.shape(x2d) = (2, 3)\n", "np.ndim(x2d) = 2\n" ] } ], "source": [ "print('1-d array:')\n", "print(x1d)\n", "print('len(x1d) = ', len(x1d))\n", "print('np.size(x1d) = ', np.size(x1d))\n", "print('np.shape(x1d) = ', np.shape(x1d))\n", "print('np.ndim(x1d) = ', np.ndim(x1d))\n", "print('\\n2-d array:')\n", "print(x2d)\n", "print('len(x2d) = ', len(x2d))\n", "print('np.size(x2d) = ', np.size(x2d))\n", "print('np.shape(x2d) = ', np.shape(x2d))\n", "print('np.ndim(x2d) = ', np.ndim(x2d))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create random data" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "array([[-0.6906269 , -0.99232915, -1.03931389],\n", " [ 1.46772714, -1.24150628, 1.26902728],\n", " [-0.2231958 , -0.58084862, -0.82472281],\n", " [ 0.74090125, -2.22196963, 0.19077031]])" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.randn(4,3)\n", "x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Joining (stacking together) arrays" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[3 0 4]\n", " [0 4 2]]\n", "[[5 7 7]\n", " [5 5 8]]\n" ] } ], "source": [ "x = np.random.randint(0, 5, size=(2, 3))\n", "print(x)\n", "y = np.random.randint(5, 10, size=(2, 3))\n", "print(y)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "array([[3, 0, 4],\n", " [0, 4, 2],\n", " [5, 7, 7],\n", " [5, 5, 8]])" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.vstack((x,y))" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "array([[3, 0, 4, 5, 7, 7],\n", " [0, 4, 2, 5, 5, 8]])" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.hstack((x,y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create equally spaced data" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "array([1, 3, 5, 7, 9])" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(start = 1, stop = 10, step = 2)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(start = 0, stop = 1, num = 11)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Interpolation\n", "\n", "Consider the following data:" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "y = [5, 4, 10, 8, 1, 10, 2, 7, 1, 3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose we want to create data in between the given data points (interpolation); for instance, let's try to double the resolution of the data by generating twice as many data:" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "array([5. , 4.52631579, 4.05263158, 6.52631579, 9.36842105,\n", " 9.26315789, 8.31578947, 5.78947368, 2.47368421, 3.36842105,\n", " 7.63157895, 8.31578947, 4.52631579, 2.78947368, 5.15789474,\n", " 6.36842105, 3.52631579, 1.10526316, 2.05263158, 3. ])" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = np.linspace(0, len(y), len(y)) # time vector for the original data\n", "tn = np.linspace(0, len(y), 2 * len(y)) # new time vector for the new time-normalized data\n", "yn = np.interp(tn, t, y) # new time-normalized data\n", "yn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The key is the Numpy `interp` function, from its help: \n", "\n", " interp(x, xp, fp, left=None, right=None) \n", " One-dimensional linear interpolation. \n", " Returns the one-dimensional piecewise linear interpolant to a function with given values at discrete data-points.\n", "\n", "A plot of the data will show what we have done:" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.figure(figsize=(10,5))\n", "plt.plot(t, y, 'bo-', lw=2, label='original data')\n", "plt.plot(tn, yn, '.-', color=[1, 0, 0, .5], lw=2, label='interpolated')\n", "plt.legend(loc='best', framealpha=.5)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more about Numpy, see [http://www.numpy.org/](http://www.numpy.org/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Read and save files\n", "\n", "There are two kinds of computer files: text files and binary files:\n", "> Text file: computer file where the content is structured as a sequence of lines of electronic text. Text files can contain plain text (letters, numbers, and symbols) but they are not limited to such. The type of content in the text file is defined by the Unicode encoding (a computing industry standard for the consistent encoding, representation and handling of text expressed in most of the world's writing systems). \n", ">\n", "> Binary file: computer file where the content is encoded in binary form, a sequence of integers representing byte values.\n", "\n", "Let's see how to save and read numeric data stored in a text file:\n", "\n", "**Using plain Python**" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is a test\n", "And here is another line\n", "\n" ] } ], "source": [ "f = open(\"newfile.txt\", \"w\") # open file for writing\n", "f.write(\"This is a test\\n\") # save to file\n", "f.write(\"And here is another line\\n\") # save to file\n", "f.close()\n", "f = open('newfile.txt', 'r') # open file for reading\n", "f = f.read() # read from file\n", "print(f)" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function open in module io:\n", "\n", "open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)\n", " Open file and return a stream. Raise OSError upon failure.\n", " \n", " file is either a text or byte string giving the name (and the path\n", " if the file isn't in the current working directory) of the file to\n", " be opened or an integer file descriptor of the file to be\n", " wrapped. (If a file descriptor is given, it is closed when the\n", " returned I/O object is closed, unless closefd is set to False.)\n", " \n", " mode is an optional string that specifies the mode in which the file\n", " is opened. It defaults to 'r' which means open for reading in text\n", " mode. Other common values are 'w' for writing (truncating the file if\n", " it already exists), 'x' for creating and writing to a new file, and\n", " 'a' for appending (which on some Unix systems, means that all writes\n", " append to the end of the file regardless of the current seek position).\n", " In text mode, if encoding is not specified the encoding used is platform\n", " dependent: locale.getpreferredencoding(False) is called to get the\n", " current locale encoding. (For reading and writing raw bytes use binary\n", " mode and leave encoding unspecified.) The available modes are:\n", " \n", " ========= ===============================================================\n", " Character Meaning\n", " --------- ---------------------------------------------------------------\n", " 'r' open for reading (default)\n", " 'w' open for writing, truncating the file first\n", " 'x' create a new file and open it for writing\n", " 'a' open for writing, appending to the end of the file if it exists\n", " 'b' binary mode\n", " 't' text mode (default)\n", " '+' open a disk file for updating (reading and writing)\n", " 'U' universal newline mode (deprecated)\n", " ========= ===============================================================\n", " \n", " The default mode is 'rt' (open for reading text). For binary random\n", " access, the mode 'w+b' opens and truncates the file to 0 bytes, while\n", " 'r+b' opens the file without truncation. The 'x' mode implies 'w' and\n", " raises an `FileExistsError` if the file already exists.\n", " \n", " Python distinguishes between files opened in binary and text modes,\n", " even when the underlying operating system doesn't. Files opened in\n", " binary mode (appending 'b' to the mode argument) return contents as\n", " bytes objects without any decoding. In text mode (the default, or when\n", " 't' is appended to the mode argument), the contents of the file are\n", " returned as strings, the bytes having been first decoded using a\n", " platform-dependent encoding or using the specified encoding if given.\n", " \n", " 'U' mode is deprecated and will raise an exception in future versions\n", " of Python. It has no effect in Python 3. Use newline to control\n", " universal newlines mode.\n", " \n", " buffering is an optional integer used to set the buffering policy.\n", " Pass 0 to switch buffering off (only allowed in binary mode), 1 to select\n", " line buffering (only usable in text mode), and an integer > 1 to indicate\n", " the size of a fixed-size chunk buffer. When no buffering argument is\n", " given, the default buffering policy works as follows:\n", " \n", " * Binary files are buffered in fixed-size chunks; the size of the buffer\n", " is chosen using a heuristic trying to determine the underlying device's\n", " \"block size\" and falling back on `io.DEFAULT_BUFFER_SIZE`.\n", " On many systems, the buffer will typically be 4096 or 8192 bytes long.\n", " \n", " * \"Interactive\" text files (files for which isatty() returns True)\n", " use line buffering. Other text files use the policy described above\n", " for binary files.\n", " \n", " encoding is the name of the encoding used to decode or encode the\n", " file. This should only be used in text mode. The default encoding is\n", " platform dependent, but any encoding supported by Python can be\n", " passed. See the codecs module for the list of supported encodings.\n", " \n", " errors is an optional string that specifies how encoding errors are to\n", " be handled---this argument should not be used in binary mode. Pass\n", " 'strict' to raise a ValueError exception if there is an encoding error\n", " (the default of None has the same effect), or pass 'ignore' to ignore\n", " errors. (Note that ignoring encoding errors can lead to data loss.)\n", " See the documentation for codecs.register or run 'help(codecs.Codec)'\n", " for a list of the permitted encoding error strings.\n", " \n", " newline controls how universal newlines works (it only applies to text\n", " mode). It can be None, '', '\\n', '\\r', and '\\r\\n'. It works as\n", " follows:\n", " \n", " * On input, if newline is None, universal newlines mode is\n", " enabled. Lines in the input can end in '\\n', '\\r', or '\\r\\n', and\n", " these are translated into '\\n' before being returned to the\n", " caller. If it is '', universal newline mode is enabled, but line\n", " endings are returned to the caller untranslated. If it has any of\n", " the other legal values, input lines are only terminated by the given\n", " string, and the line ending is returned to the caller untranslated.\n", " \n", " * On output, if newline is None, any '\\n' characters written are\n", " translated to the system default line separator, os.linesep. If\n", " newline is '' or '\\n', no translation takes place. If newline is any\n", " of the other legal values, any '\\n' characters written are translated\n", " to the given string.\n", " \n", " If closefd is False, the underlying file descriptor will be kept open\n", " when the file is closed. This does not work when a file name is given\n", " and must be True in that case.\n", " \n", " A custom opener can be used by passing a callable as *opener*. The\n", " underlying file descriptor for the file object is then obtained by\n", " calling *opener* with (*file*, *flags*). *opener* must return an open\n", " file descriptor (passing os.open as *opener* results in functionality\n", " similar to passing None).\n", " \n", " open() returns a file object whose type depends on the mode, and\n", " through which the standard file operations such as reading and writing\n", " are performed. When open() is used to open a file in a text mode ('w',\n", " 'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open\n", " a file in a binary mode, the returned class varies: in read binary\n", " mode, it returns a BufferedReader; in write binary and append binary\n", " modes, it returns a BufferedWriter, and in read/write mode, it returns\n", " a BufferedRandom.\n", " \n", " It is also possible to use a string or bytearray as a file for both\n", " reading and writing. For strings StringIO can be used like a file\n", " opened in a text mode, and for bytes a BytesIO can be used like a file\n", " opened in a binary mode.\n", "\n" ] } ], "source": [ "help(open)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Using Numpy**" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.883102, 0.753414, 0.4674 ],\n", " [-0.636654, 0.26745 , -0.464358],\n", " [-0.654547, 1.19539 , -0.488873]])" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "data = np.random.randn(3,3)\n", "np.savetxt('myfile.txt', data, fmt=\"%12.6G\") # save to file\n", "data = np.genfromtxt('myfile.txt', unpack=True) # read from file\n", "data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ploting with matplotlib\n", "\n", "Matplotlib is the most-widely used packge for plotting data in Python. Let's see some examples of it." ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the IPython magic `%matplotlib inline` to plot a figure inline in the notebook with the rest of the text:" ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "t = np.linspace(0, 0.99, 100)\n", "x = np.sin(2 * np.pi * 2 * t) \n", "n = np.random.randn(100) / 5\n", "plt.Figure(figsize=(12,8))\n", "plt.plot(t, x, label='sine', linewidth=2)\n", "plt.plot(t, x + n, label='noisy sine', linewidth=2)\n", "plt.annotate(s='$sin(4 \\pi t)$', xy=(.2, 1), fontsize=20, color=[0, 0, 1])\n", "plt.legend(loc='best', framealpha=.5)\n", "plt.xlabel('Time [s]')\n", "plt.ylabel('Amplitude')\n", "plt.title('Data plotting using matplotlib')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the IPython magic `%matplotlib qt` to plot a figure in a separate window (from where you will be able to change some of the figure proprerties):" ] }, { "cell_type": "code", "execution_count": 104, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "%matplotlib qt" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "mu, sigma = 10, 2\n", "x = mu + sigma * np.random.randn(1000)\n", "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))\n", "ax1.plot(x, 'ro')\n", "ax1.set_title('Data')\n", "ax1.grid()\n", "\n", "n, bins, patches = ax2.hist(x, 25, density=True, facecolor='r') # histogram\n", "ax2.set_xlabel('Bins')\n", "ax2.set_ylabel('Probability')\n", "ax2.set_title('Histogram')\n", "fig.suptitle('Another example using matplotlib', fontsize=18, y=1)\n", "ax2.grid()\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And a window with the following figure should appear:" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(url=\"./../images/plot.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can switch back and forth between inline and separate figure using the `%matplotlib` magic commands used above. There are plenty more examples with the source code in the [matplotlib gallery](http://matplotlib.org/gallery.html)." ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "# get back the inline plot\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Signal processing with Scipy\n", "\n", "The Scipy package has a lot of functions for signal processing, among them: Integration (scipy.integrate), Optimization (scipy.optimize), Interpolation (scipy.interpolate), Fourier Transforms (scipy.fftpack), Signal Processing (scipy.signal), Linear Algebra (scipy.linalg), and Statistics (scipy.stats). As an example, let's see how to use a low-pass Butterworth filter to attenuate high-frequency noise and how the differentiation process of a signal affects the signal-to-noise content. We will also calculate the Fourier transform of these data to look at their frequencies content." ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "from scipy.signal import butter, filtfilt\n", "import scipy.fftpack\n", "freq = 100.\n", "t = np.arange(0,1,.01);\n", "w = 2*np.pi*1 # 1 Hz\n", "y = np.sin(w*t)+0.1*np.sin(10*w*t)\n", "# Butterworth filter\n", "b, a = butter(4, (5/(freq/2)), btype = 'low')\n", "y2 = filtfilt(b, a, y)\n", "# 2nd derivative of the data\n", "ydd = np.diff(y,2)*freq*freq # raw data\n", "y2dd = np.diff(y2,2)*freq*freq # filtered data\n", "# frequency content \n", "yfft = np.abs(scipy.fftpack.fft(y))/(y.size/2); # raw data\n", "y2fft = np.abs(scipy.fftpack.fft(y2))/(y.size/2); # filtered data\n", "freqs = scipy.fftpack.fftfreq(y.size, 1./freq)\n", "yddfft = np.abs(scipy.fftpack.fft(ydd))/(ydd.size/2);\n", "y2ddfft = np.abs(scipy.fftpack.fft(y2dd))/(ydd.size/2);\n", "freqs2 = scipy.fftpack.fftfreq(ydd.size, 1./freq)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the plots:" ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "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PxXeftvNQPD117Bjh2tdf+01uPrqAn27pmh48803GTt2LN9++63XoZhcUNWOxzivwD0hCidX/OsPDSr3b87wMBJjij6rs09MUUrAczWgR0R64rqoUK1atYKOqWjq3x+Skvi9yV2891MrPhroZiDMKjwcKleG6GgotXUd4t/M7oiyJMfVZktiGJs2uST922/h5ZfdNbVru54tbdrAJZdAWBhuJpX//AcmTDh08+hoWL3a9UG/5RZ3gzJlQvL2TdH3+OOPs3LlSt566y2vQzFFiH9T+qHXidl9pRhjCoLV2UcqSgl4rgb0qOpoYDRAQkKCdVrOInnuAiaPK8YYWcAv358H37vjMTHwr3+5luwLL4QzzoAqVVwSDsCBCtC0rWsev6gt6e++x/oNwl9/wYIFruX8229dy/mLL7qtenW47ebd3Da3K9UWTIdSpWDoULjuOtf95Pnn4fHHXcv4vn3w3ns5NJ8br6SlpREeXpSqCWNy5t96qH7x74zwMBJjCobV2UWIqhaaDagBLM7h3L+B2biW8IuAn451v/POO0+Ns3Wr6mOPZmhssSR1/UFUY2NV77xTdc4c1f37c3GTlStVY2Lcxf/97xGn09JU589X7dtXtXp1zXxOMVL1llLv6+9Tlh55z2XLDt3z3XdP+H2aE1e9enUdOnSonnXWWVq8eHFNTU3VZ555RmvVqqXR0dFav359nT59emb5atWq6YIFC1RVddKkSQrokiVLVFV1zJgx2qZNm2yfs3XrVm3VqpXGxMTo+eefrwMHDtSmTZtmnr/vvvu0atWqGhMTo40bN9ZvvvlGVVVnz56tERERGh4erlFRUXr22Werqur48eO1Xr16Gh0drTVr1tTXXnutQD6fUAIWaCGom0O5FWS9vfTa3nonryioNo/9tcCeY0woWZ1deOSlzva8ss0MBN7B9edOxbV23w7cCdwZOC/Ay8DfwB9AwrHuaQm46q5dqgMHqkZFHUqIm0b8qG+N2at79x7HDd99190kLEx1/Pgci6Uv+FU/j22n7XlHi5Ga+ezWrVUD/z8/5LXX3Mny5VX9/uMIqog7+OEU9JZL1atX10aNGum6det0b+A/kqlTp+o///yj6enpOmXKFC1VqpRu3LhRVVU7d+6sI0aMUFXVHj16aK1atfSVV17JPPf8889n+5z27dvrTTfdpLt379Y//vhDK1eu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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(2, 2, figsize=(12, 6))\n", "\n", "ax1.set_title('Temporal domain', fontsize=14)\n", "ax1.plot(t, y, 'r', linewidth=2, label = 'raw data')\n", "ax1.plot(t, y2, 'b', linewidth=2, label = 'filtered @ 5 Hz')\n", "ax1.set_ylabel('f')\n", "ax1.legend(frameon=False, fontsize=12)\n", "\n", "ax2.set_title('Frequency domain', fontsize=14)\n", "ax2.plot(freqs[:int(yfft.size/4)], yfft[:int(yfft.size/4)],'r', lw=2,label='raw data')\n", "ax2.plot(freqs[:int(yfft.size/4)],y2fft[:int(yfft.size/4)],'b--',lw=2,label='filtered @ 5 Hz')\n", "ax2.set_ylabel('FFT(f)')\n", "ax2.legend(frameon=False, fontsize=12)\n", "\n", "ax3.plot(t[:-2], ydd, 'r', linewidth=2, label = 'raw')\n", "ax3.plot(t[:-2], y2dd, 'b', linewidth=2, label = 'filtered @ 5 Hz')\n", "ax3.set_xlabel('Time [s]'); ax3.set_ylabel(\"f ''\")\n", "\n", "ax4.plot(freqs[:int(yddfft.size/4)], yddfft[:int(yddfft.size/4)], 'r', lw=2, label = 'raw')\n", "ax4.plot(freqs[:int(yddfft.size/4)],y2ddfft[:int(yddfft.size/4)],'b--',lw=2, label='filtered @ 5 Hz')\n", "ax4.set_xlabel('Frequency [Hz]'); ax4.set_ylabel(\"FFT(f '')\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more about Scipy, see [https://docs.scipy.org/doc/scipy/reference/tutorial/](https://docs.scipy.org/doc/scipy/reference/tutorial/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Symbolic mathematics with Sympy\n", "\n", "Sympy is a package to perform symbolic mathematics in Python. Let's see some of its features:" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "from IPython.display import display\n", "import sympy as sym\n", "from sympy.interactive import printing\n", "printing.init_printing()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define some symbols and the create a second-order polynomial function (a.k.a., parabola):" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG4AAAAWCAYAAAAhKqlXAAAABHNCSVQICAgIfAhkiAAAA2JJREFUaIHt2VuIlVUUwPHf6Lx1k4oaIojCwIfIEB/CrKzBrnTB8EHIDLSwguxKjSCdpKDQ6AYW1UNlT1H4oIWlFWZEdLWoCE2wjJrUjKIbXntY3xmP22/OmXO+c87MgfOHj/3N/va3v7Vm7b3W2uv0lEolXTqPcQXfH8An+BM7sRpnFRWqS22KGm4GVmAaLsY+rMfxBeftUoPegu9fmvw9F3/gPLH7urSIojsu5Zhszt1NnrcWJ2ABVuF7/CsW0AeYr/l6topH8Q62Cx124ws8IHQcouiOS3kCm/BRk+etxWw8g1/wHn7EyZiFF3B5NuZgm+WqlzvxOdZhB47CuSjh5ux+O8013DJcgPOxv4nzjoTNuBpv4EBF/2J8jOuEEV9vs1z1ciz+y+l/WOgygFs50oW8LVblrKS/By9mzx7Jmfgx3IB+4arazbsiph5I+gfxbHY/I3nWqK6tJM9o8GrWnlnuSA13r1D+IYyv6F+OeXge9yfvPIXrcRG+bUzelrI3a/cl/Y3oOlpclbVflTtSV/klVgrB54qVtxh3CasvTMavEEa7VgTSvqz/r+wabXqFJ4C1ybN6dW0n9+BoHIepmC6MNuQBenIqJ6diC34Vq+9pvCViyJ5k7HDB/kERUEeb5bgbb+LKnOf16NpOBkVyVWYtbhRyIj9N/klkh6cJRT4UcSBPkZ5hrlINwbYJo4/0eqXGfHncLoz2ndhRedSjazt16BP/x75MnjPEsWBKecBwWeXOivv5+KeOj46ErYYPxHn8XOf8t+FJEXP7VT9XNqprq3UgdtgqcUTYjJdlJcU8w80RbmNQWHwRbmngo9Xob/J8ldyBx/F19p0dVcYW0bWVOqT8IBbhOTgRu1JXeQVewjc4W7iZBZjURiGLcJ8w2iaR5VYzWqfpekrW7ufwGDcdrwm/f4lwIUvErmz3eaYRlgg5PxO7YVeVsWNR10kOZeWVjBMH8JNEDP6dQ65yMtaI+t5MUToilPsU14iKyMZWSV2QeVgqVuNGkZikbBMp/1jV9TJRfXpfxM/fRGZ5oUhOBnFTeXAvJooU+KCo9m9NJhwQtbNlolY2Fjk9a8eLGJfHBlF0Hqu6rsdz4peVyZiAv0VSslIUOoaSrLxzXJcOoFN+7uiS0DVch9I1XIfyP7n98yVW8FZKAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle x^{2} - 2 x - 3$" ], "text/plain": [ " 2 \n", "x - 2⋅x - 3" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x, y = sym.symbols('x y')\n", "y = x**2 - 2*x - 3\n", "y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the parabola at some given range:" ] }, { "cell_type": "code", "execution_count": 113, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sympy.plotting import plot\n", "%matplotlib inline\n", "plot(y, (x, -3, 5));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the roots of the parabola are given by: " ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEsAAAAVCAYAAAAOyhNtAAAABHNCSVQICAgIfAhkiAAAAjJJREFUWIXt2DtoFEEYB/BfDgvBV4qgYiMElBQ+glgoKhewsRFELAXTaKFVII0ieBaCIlpIKivx0dgoiCAoJFpYKoiI+IAERXxFCzUKKrGYPW7v3Li7R25zIf5hmLnd7zHzv5lvvv06KpWK/8iGUmzch8lYezoTE2oDdKnnYbL6Yl6C8F2M4GMLJrIHZfRiPRbhCva2wFccp7ARqwUyvmMM1zGE8ZjsBI5H436srL5IImsElWmebBVHBZK+4jV6WuSnEQN4gNt4jwXYJKzzQDR+FclOqK2/TwpZrcSAQNILYYcNF+R3MX4kPD+BIziMg2lGSmkC04xhPBeLAwUhiSi4GvWrshgpmqx2w86of5RFuOhjONMYxEIsEQL+VoGok1mU5yJZy2K/bwk33ocsynmO4ai/849/tcs5bBeF5eiI+t3oxkNsyKKcZ2e9NHWgTMKbHLJF4x2uCenEM1zEmjSlPGRtb25ebY0xPBGS5C4pifhcvw1hRdT/ThOcDWRdEGJgf5P6PUKMakRJSEqX4j4+pxkq+jbcFTVqC9gsEEI4BoMNOtU/9FeTPnfgNO4JcXdcuBHLQoB/i/1ZDBVNVi/2NTzrjhohhjSStRZfcLNJn3dwHluE79JOfBMC+yWcw6cshoomqyLfR3on1uGMDMdkCjzGoSZ165AUs45pn3rWNvzE2QJ9xutZ5fiL+M4aVavj0Jp6Vl7cwPyCfcbrWXVoJKtSwGTaHfF6Vh1mQ+rQNvgD+/Jy9nrixK0AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\left[ -1, \\ 3\\right]$" ], "text/plain": [ "[-1, 3]" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sym.solve(y, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also do symbolic differentiation and integration:" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD4AAAASCAYAAAADr20JAAAABHNCSVQICAgIfAhkiAAAAgZJREFUWIXt10+ITlEYx/HPa96lnQU72VFia0HRhFhQI8lizGJmQQqRMJl6EzVFMVlQLEasRBb+ZCgSWYiikERNEhNSNsj/xTlx3fedO2fe1wz1+tXtnp7znHOf7z3Pee65pUqlohk1IdOehC6cwRN8wDvcQGfO919VMkM5M2glDuElruIZJqMNR7Ek+nwf8/DrVzJDFvwxluE8vmXs3biFFXGC02McfCNKZsim7xWczQ2AIRyO7fm5vktCBrTl7CX0x77eOgDqVTJD6r79HO9fcvat8SG70ZKx70MHjmB74jPGWr8xpICXsSa2L+b67uE4ZqA92rqxGSextpFI/6CqGMrD+/5UL2biAgZq9O/EKlQwEXuiX7vqlPtbqmIYacU3YAse+bWieT3HAUzFQdwU9vynhIAGhTqQep1ImDOJoWjF16MPD9GKtwW+rzPtTrxPDOopPib6wotR+FLAMBz4JuzH/TjgVcHkq4ViNoQp2Ih1iYG1JvrVo0KGWqm+LQ64iwX5ATktxTE8wCwhnbowvdGoG9SIDHnwHqEQ3BHe0puCyefilLDHFwnp3iNk0Xh+u/NKYsimegd24SuuC0Uhr0HhYDIb54Rz8ELhiEh4EbexHPPiPOOpZIYs+LR4bxH2Ry1dEw78A0KVXSwUqKx24DL2Ys7oY29IqQz9pf+/pU2mpgX/Aa59m0oekefPAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle 2 x - 2$" ], "text/plain": [ "2⋅x - 2" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dy = sym.diff(y, x)\n", "dy" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAWCAYAAABnnAr9AAAABHNCSVQICAgIfAhkiAAAAplJREFUWIXt2E+IFEcUx/HP6h71khz0IIiQgwHRq/gPdYnBBBJQPAjqCrsHg2AkIlFB2EgOghvyRzBCPCToSRQP/sF/KLJBxD+goEE0goioiUHQg4quq4fX4lDpnZmentVF5gtN91RXvarfm1evqrqtp6dHi9qMKNl+Pc7hEe5jPyaVHdRwpKyjZmMbpmEu+nEcH5S0O+xoL9n+0+T3UjzEdBFd7w1lIypldGbzQZPt1uJDdGMf/sYT8Yf9iS5N0Fk2olJ+wkWcabLdWizCr7iLk7iFMViAHZif1XnZaAfNdNQWzMJMvGii3Xq4hi9wEAMV5RtwFguF0/Y22kEakkeF1xck5W34PXu3OcfOD1iGDhH6b5sTIicOJOX3sD17np28K6Q1ddTarLPvMbKivBed+A3rkja/YAnm4K/Btbwznmf3/qS8kNbUUZewEx+LFYwI32+wGyuS+tuwHItFAh+bXaMKihkq2kWkw+HkXSGtbTk783G4jn+Ed7fiiMgBz5K6gyXH7/A/w++AXqzBIXye875urXnL5m2xeo3PGp4W8zh1EjGf866eGgJuCifXe+2qYS+PVcJJV72JmJS6tQ626t2veO7C4wYGWo0beFqg/p2C9lfiZ5EzO1Tf19WlNc9Ri0UY3hP55mt8VXCgtehosr1KVuNHXM76+bdK3bq1plPvM/yBK5gswrYbE0sM/G3yrXDSRbEKV3NSIa2VjpqBPWLezhMhuVFEXd7eabixUYzzgoik/6rULaz19dSbggPifPSJOArIjJ3Hl2LH3de4jiGlE5vEiaBPJPKUm2Ij2ZDWdnwklsSX4mvAjaSD9TgmjihTS8kZOiZk95EiR+VxShySG9Kat49qkUOzP7O8t7QcVSctR9XJK1evs2HGWXqFAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle x^{2} - 2 x$" ], "text/plain": [ " 2 \n", "x - 2⋅x" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sym.integrate(dy, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, let's use Sympy to represent three-dimensional rotations. Consider the problem of a coordinate system xyz rotated in relation to other coordinate system XYZ. The single rotations around each axis are illustrated by:" ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(url=\"./../images/rotations.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The single 3D rotation matrices around Z, Y, and X axes can be expressed in Sympy:" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\mathbf{R_{X}}=\\left[\\begin{matrix}1 & 0 & 0\\\\0 & \\cos{\\left(\\alpha \\right)} & - \\sin{\\left(\\alpha \\right)}\\\\0 & \\sin{\\left(\\alpha \\right)} & \\cos{\\left(\\alpha \\right)}\\end{matrix}\\right]$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\mathbf{R_{Y}}=\\left[\\begin{matrix}\\cos{\\left(\\beta \\right)} & 0 & \\sin{\\left(\\beta \\right)}\\\\0 & 1 & 0\\\\- \\sin{\\left(\\beta \\right)} & 0 & \\cos{\\left(\\beta \\right)}\\end{matrix}\\right]$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle \\mathbf{R_{Z}}=\\left[\\begin{matrix}\\cos{\\left(\\gamma \\right)} & - \\sin{\\left(\\gamma \\right)} & 0\\\\\\sin{\\left(\\gamma \\right)} & \\cos{\\left(\\gamma \\right)} & 0\\\\0 & 0 & 1\\end{matrix}\\right]$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.core.display import Math\n", "from sympy import symbols, cos, sin, Matrix, latex\n", "a, b, g = symbols('alpha beta gamma')\n", "\n", "RX = Matrix([[1, 0, 0], [0, cos(a), -sin(a)], [0, sin(a), cos(a)]])\n", "display(Math(latex('\\\\mathbf{R_{X}}=') + latex(RX, mat_str = 'matrix')))\n", "\n", "RY = Matrix([[cos(b), 0, sin(b)], [0, 1, 0], [-sin(b), 0, cos(b)]])\n", "display(Math(latex('\\\\mathbf{R_{Y}}=') + latex(RY, mat_str = 'matrix')))\n", "\n", "RZ = Matrix([[cos(g), -sin(g), 0], [sin(g), cos(g), 0], [0, 0, 1]])\n", "display(Math(latex('\\\\mathbf{R_{Z}}=') + latex(RZ, mat_str = 'matrix')))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And using Sympy, a sequence of elementary rotations around X, Y, Z axes is given by:" ] }, { "cell_type": "code", "execution_count": 119, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\mathbf{R_{XYZ}}=\\left[\\begin{matrix}\\cos{\\left(\\beta \\right)} \\cos{\\left(\\gamma \\right)} & \\sin{\\left(\\alpha \\right)} \\sin{\\left(\\beta \\right)} \\cos{\\left(\\gamma \\right)} - \\sin{\\left(\\gamma \\right)} \\cos{\\left(\\alpha \\right)} & \\sin{\\left(\\alpha \\right)} \\sin{\\left(\\gamma \\right)} + \\sin{\\left(\\beta \\right)} \\cos{\\left(\\alpha \\right)} \\cos{\\left(\\gamma \\right)}\\\\\\sin{\\left(\\gamma \\right)} \\cos{\\left(\\beta \\right)} & \\sin{\\left(\\alpha \\right)} \\sin{\\left(\\beta \\right)} \\sin{\\left(\\gamma \\right)} + \\cos{\\left(\\alpha \\right)} \\cos{\\left(\\gamma \\right)} & - \\sin{\\left(\\alpha \\right)} \\cos{\\left(\\gamma \\right)} + \\sin{\\left(\\beta \\right)} \\sin{\\left(\\gamma \\right)} \\cos{\\left(\\alpha \\right)}\\\\- \\sin{\\left(\\beta \\right)} & \\sin{\\left(\\alpha \\right)} \\cos{\\left(\\beta \\right)} & \\cos{\\left(\\alpha \\right)} \\cos{\\left(\\beta \\right)}\\end{matrix}\\right]$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "RXYZ = RZ*RY*RX\n", "display(Math(latex('\\\\mathbf{R_{XYZ}}=') + latex(RXYZ, mat_str = 'matrix')))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose there is a rotation only around X ($\\alpha$) by $\\pi/2$; we can get the numerical value of the rotation matrix by substituing the angle values:" ] }, { "cell_type": "code", "execution_count": 120, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0\\\\0 & 6.12323399573677 \\cdot 10^{-17} & -1.0\\\\0 & 1.0 & 6.12323399573677 \\cdot 10^{-17}\\end{matrix}\\right]$" ], "text/plain": [ "⎡1 0 0 ⎤\n", "⎢ ⎥\n", "⎢0 6.12323399573677e-17 -1.0 ⎥\n", "⎢ ⎥\n", "⎣0 1.0 6.12323399573677e-17⎦" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = RXYZ.subs({a: np.pi/2, b: 0, g: 0})\n", "r" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can prettify this result:" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\mathbf{R_{(\\alpha=\\pi/2)}}=\\left[\\begin{matrix}1.0 & 0 & 0\\\\0 & 0 & -1.0\\\\0 & 1.0 & 0\\end{matrix}\\right]$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(Math(latex(r'\\mathbf{R_{(\\alpha=\\pi/2)}}=') +\n", " latex(r.n(chop=True, prec=3), mat_str = 'matrix')))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more about Sympy, see [http://docs.sympy.org/latest/tutorial/](http://docs.sympy.org/latest/tutorial/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data analysis with pandas\n", "\n", "> \"[pandas](http://pandas.pydata.org/) is a Python package providing fast, flexible, and expressive data structures designed to make working with “relational” or “labeled” data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real world data analysis in Python.\"\n", "\n", "To work with labellled data, pandas has a type called DataFrame (basically, a matrix where columns and rows have may names and may be of different types) and it is also the main type of the software [R](http://www.r-project.org/). Fo ezample:" ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 123, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/plain": [ "['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B']" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = 5*['A'] + 5*['B']\n", "x" ] }, { "cell_type": "code", "execution_count": 124, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df = pd.DataFrame(np.random.rand(10,2), columns=['Level 1', 'Level 2'] )\n", "df['Group'] = pd.Series(['A']*5 + ['B']*5)\n", "plot = df.boxplot(by='Group')" ] }, { "cell_type": "code", "execution_count": 125, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from pandas.plotting import scatter_matrix\n", "df = pd.DataFrame(np.random.randn(100, 3), columns=['A', 'B', 'C'])\n", "plot = scatter_matrix(df, alpha=0.5, figsize=(8, 6), diagonal='kde')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pandas is aware the data is structured and give you basic statistics considerint that and nicely formatted:" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "run_control": { "breakpoint": false } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABC
count100.000000100.000000100.000000
mean-0.1256030.334550-0.258382
std1.0302350.9531701.054638
min-2.296190-2.070958-3.255490
25%-0.854034-0.183688-1.016014
50%-0.1749340.317987-0.156706
75%0.5656230.9337200.401442
max2.5424792.6260982.126710
\n", "
" ], "text/plain": [ " A B C\n", "count 100.000000 100.000000 100.000000\n", "mean -0.125603 0.334550 -0.258382\n", "std 1.030235 0.953170 1.054638\n", "min -2.296190 -2.070958 -3.255490\n", "25% -0.854034 -0.183688 -1.016014\n", "50% -0.174934 0.317987 -0.156706\n", "75% 0.565623 0.933720 0.401442\n", "max 2.542479 2.626098 2.126710" ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more on pandas, see this tutorial: [http://pandas.pydata.org/pandas-docs/stable/10min.html](http://pandas.pydata.org/pandas-docs/stable/10min.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## More about Python\n", "\n", "There is a lot of good material in the internet about Python for scientific computing, here is a small list of interesting stuff: \n", "\n", " - [How To Think Like A Computer Scientist](http://www.openbookproject.net/thinkcs/python/english2e/) or [the interactive edition](http://interactivepython.org/courselib/static/thinkcspy/index.html) (book)\n", " - [Python Scientific Lecture Notes](http://scipy-lectures.github.io/) (lecture notes) \n", " - [A Whirlwind Tour of Python](https://github.com/jakevdp/WhirlwindTourOfPython) (tutorial/book) \n", " - [Python Data Science Handbook](https://jakevdp.github.io/PythonDataScienceHandbook/) (tutorial/book) \n", " - [Lectures on scientific computing with Python](https://github.com/jrjohansson/scientific-python-lectures#lectures-on-scientific-computing-with-python) (lecture notes)" ] } ], "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.8.5" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "nbTranslate": { "displayLangs": [ "*" ], "hotkey": "alt-t", "langInMainMenu": true, "sourceLang": "en", "targetLang": "fr", "useGoogleTranslate": true }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }