--- title: 4th GouTP @ SCEE subtitle: Python introduction for MATLAB users author: Lilian Besson institute: SCEE Team, IETR, CentraleSupรฉlec, Rennes smallinstitute: IETR date: Thursday 18th of January, 2018 lang: english babel-lang: english handout: true numbersections: true section-titles: false fontsize: 12pt include-before: \section*{\hfill{}4th GouTP\hfill{}} \subsection*{\hfill{}Python introduction for MATLAB users\hfill{}} --- # $4^{\text{th}}$ $2017/18$ GouTP @ SCEE - *About:* **Python introduction for MATLAB users** - *Date:* $18$th of January $2018$ - *Who:* Lilian Besson --- # What's a *"GouTP"* ? - **Internal monthly technical training session** ๐ - Usually: *Thursday 3pm - 3:30pm* - With โ coffee and ๐ช sweets : we relax while training ! > Initiative of Quentin and Vincent ๐ in last January... > Continued by Rรฉmi and Lilian ๐ ! ## Not only @ SCEE ? - Currently open to the *FAST* and *AUT* teams --- # Agenda for today \hfill{} \alert{[30 min]} 1. What is Python \hfill{} \alert{[5 min]} 2. Main differences in syntax and concepts \hfill{} \alert{[5 min]} 3. Examples of problems solved Python \hfill{} \alert{[10 min]} 4. Where can you find more information ? \hfill{} \alert{[5 min]} --- # 1. What is Python ๐ ? - developed and popular from the last $25$ years - Open-source and free programming language - Interpreted, multi-platform, imperative and object-oriented - Designed and acknowledged as *simple to learn and use* - Used worldwide: research, data science, web applications etc ### Ressources - **Website**: python.org for the language & pypi.org for packages - Documentation : docs.python.org (:fr: [docs.python.org/fr/3](https://docs.python.org/fr/3) translation in progress) --- # Comparison with MATLAB | | Python ๐ | MATLAB ๐ข |:-|:-:|:-:| | **Cost** | Free โ | Hundreds of euros / year | **License** | Open-source | 1 year user license (no longer after your PhD!) | **Comes from** | A non-profit foundation, and the community | MathWorks company | **Scope** | Generic | Numeric only | **Platform** | Any ๐ป ๐ฑ | Desktop only ๐ป | **Usage** | Generic, worldwide ๐ | Research in academia and industry --- > But Python don't have only advantagesโฆ | | Python ๐ข | MATLAB ๐ |:-|:-:|:-:| | **Packaging** | Different solutions (`conda`, `pip`, it works fine) | Toolboxes already included | **IDE** | Many possibilities, have to chose one (*Spyder*) | Good IDE already included | **Support?** | Community (StackOverflow, IRC, mailing lists etc) | By MathWorks ? | **Performances** | Interpreted, not so fast (check *Pypy* for speed)| Faster (but worse than C, Julia) | **Documentation** | OK but very diverse | OK and inline --- # How to install Python โฌ - On Linux and Mac OS : already installed! - On Windows: + You can use the default installer from [python.org/downloads/windows](https://www.python.org/downloads/windows/) ๐ + Or the full installer from [anaconda.com/download](https://www.anaconda.com/download/) (โจ) - Takes about $10$ minutes... and it's free ! > โ Choose **Python 3** (currently 3.6.4) **not 2 !** > โ Python 2 will stop in less than 3 years (pythonclock.org) --- # My suggestions for Python ๐ - Use **Anaconda** to install (and upgrade) Python and packages - Use **IPython** for the command line (โจ awesome features !) - Use: + **Spyder** for your IDE if you like the MATLAB interface (installed in Anaconda, or github.com/spyder-ide/spyder) + **PyCharm** if you want "the most powerful Python IDE ever" + Or a good generic text editor + a plugin for Python (Emacs, Vim, Atom, SublimeText, **Visual Studio Code**โฆ) - Use **Jupyter notebooks** to write or share your experiments (jupyter.org, eg. github.com/Naereen/notebooks) > More suggestions: pierreh.eu/python-setup by Pierre Haessig --- ## ๐ฆ How to install modules in Python - If you used Anaconda, use `conda install [name]` (in a terminal) to install module `[name]`, - Or with the standard installer, use `pip install [name]`. ## ๐ How to find the module you need ? - Ask your colleagues ๐ ! - Look on the Internet ! - Look directly on [pypi.org](https://pypi.org) (official) or [anaconda.org](https://anaconda.org) --- # ๐ฆ Overview of main Python modules > Standard library is very rich, but not for scientific applications - **Numpy** (numpy.org) for `numpy.array` for multi-dim arrays and linear algebra - **Scipy** (scipy.org) for numerical computations (signal processing, integration, ODE integration, optimization etc) - **Matplotlib** (matplotlib.org) for MATLAB-like 2D and 3D plots - **pandas** for data manipulation (very powerful) - **Scikit-Learn** (scikit-learn.org) for "classical" Machine Learning - **Scikit-image** for 2D and generic image processing - **Keras** (keras.io) for neural networks and deep learning > And many others ! Check pypi.org --- # 2. Main differences in syntax between Python and MATLAB > Ref: mathesaurus.sourceforge.net/matlab-python-xref.pdf | | Python | MATLAB |:-|:-:|:-:| | **File ext.** | \alert{`.py`} | \alert{`.m`} | **Comment** | `# blabla...` | `% blabla...` | **Indexing** | `a[0]` to `a[-1]` | `a(1)` to `a(end)` | **Slicing** | `a[0:100]` (view) | `a(1:100)` (โ copy) | **Operations** | Element-wise by default | Linear algebra by default | **Logic** | Use `:` and indexing | Use `endif` `endfor` etc --- | | Python | MATLAB |:-|:-:|:-:| | **Help** | `help(func)` or `func?` (IPython) | `help func` | **And** | `a and b` | `a && b` | **Or** | `a or b` | `a || b` | **Datatype** | `np.array` of *any* type | multi-dim doubles array | **Array** | `np.array([[1,2],[3,4]], dtype=float)` | `[1 2; 3 4]` | **Size** | `np.size(a)` | `size(a)` | **Nb Dim** | `np.ndim(a)` | `ndims(a)` | **Last** | `a[-1]` | `a(end)` > With `import numpy as np` --- | | Python | MATLAB |:-|:-:|:-:| | **Tranpose** | `a.T` | `a.'` | **Conj. transpose** | `a.conj().T` | `a'` | **Matrix** $\times$ | `a.dot(b)` or `a @ b` | `a * b` | **Element-wise** $\times$ | `a * b` | `a .* b` | **Element-wise** $/$ | `a / b` | `a ./ b` | **Element-wise** ^ | `a ** 3` | `a .^ 3` | **Zeros** | `numpy.zeros((2,3,5))` | `zeros(2,3,5)` | **Ones** | `numpy.ones((2,3,5))` | `ones(2,3,5)` | **Identity** | `numpy.eye(10)` | `eye(10)` | **Range** for loops | `range(0, 100, 2)` | `1:2:100` | **Range** for arrays | `numpy.arange(0, 100, 2)` | `1:2:100` --- | | Python | MATLAB |:-|:-:|:-:| | **Maximum** | `np.max(a)` | `max(max(a))` ? | **Random matrix** | `np.random.rand(3,4)` | `rand(3,4)` | $L^2$ **Norm** | `np.sqrt(v @ v)` or `L.norm(v)` | `norm(v)` | **Inverse** | `L.inv(a)` | `inv(a)` | **Pseudo inv** | `L.pinv(a)` | `pinv(a)` | **Solve syst.** | `L.solve(a, b)` | `a \ b` | **Eigen vals** | `V, D = L.eig(a)` | `[V,D]=eig(a)` | **FFT/IFFT** | `np.fft(a)`, `np.ifft(a)` | `fft(a)`,`ifft(a)` > With `import numpy as np; import numpy.linalg as L` --- # 3. Scientific problems solved with Python > Just to give examples of syntax and modules 1. $1$D numerical integration and plot 3. Solving a $2$D Ordinary Differential Equation 2. Solving a constraint optimization problem and plotting solution 4. A simple neural network 5. Symbolic computations --- # 3.1. $1$D numerical integration and plot > Goal : evaluate and plot the function on $[-1, 1]$ : > $$\mathrm{Ei}(x) := \int_{-\infty}^x \frac{\mathrm{e}^u}{u} \;\mathrm{d}u$$ ## How to? Use modules! - `numpy` for maths functions and arrays - `scipy.integrate.quad` function for numerical integration - `matplotlib.pyplot.plot` for $2$D plotting --- ```python import numpy as np # standard convention import matplotlib.pyplot as plt # standard convention from scipy.integrate import quad # need only 1 function def Ei(x, minfloat=1e-6, maxfloat=1000): def f(t): return np.exp(-t) / t if x > 0: return -1.0 * (quad(f, -x, -minfloat)[0] + quad(f, minfloat, maxfloat)[0]) else: return -1.0 * quad(f, -x, maxfloat)[0] X = np.linspace(-1, 1, 1000) # 1000 points Y = np.vectorize(Ei)(X) # or [Ei(x) for x in X] plt.plot(X, Y) # MATLAB-like interface plt.title("The function Ei(x)") plt.xlabel("x"); plt.ylabel("y") plt.savefig("figures/Ei_integral.png") plt.show() ``` ---