{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# M8 - TP1 : Premiers pas avec Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Le but du TP est de commencer à étudier de vraies données avec Python. Pour plus de détails sur Python, NumPy et Matplotlib, un grand nombre de ressources sont disponibles sur https://pythonprogramming.net/ , y compris plusieurs séries de vidéos YouTube.\n", "\n", "La documentation complète est disponible ici : \n", "https://docs.scipy.org/doc/numpy-1.15.0/reference/index.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Initiation à Numpy\n", "\n", "Python est un langage très complet et utilisé dans de nombreux domaines, du développement Web à la robotique.\n", "\n", "Dans cette série de TP, nous l'utiliserons pour le calcul mathématique et la science des données.\n", "\n", "Les bibliothèques de prédilection pour le calcul mathématique en Python sont NumPy et Matplotlib. Pour nous familiariser avec ces bibliothèques, nous allons nous baser sur le tutoriel disponible ici : https://numpy.org/doc/stable/user/absolute_beginners.html.\n", "\n", "La plupart sinon toutes les réponses aux questions du TP sont disponibles dans ce tutoriel.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ex. 1 : Python et NumPy en quelques lignes\n", "Commencez par importer la bibliothèque numpy afin de pouvoir l'utiliser" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "help(np.argmax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculez $\\log(\\cos(1-(1+1)/2))$ avec NumPy" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np.log(np.cos(1 - (1 + 1)/2 ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Que fait l'instruction help ?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "help(print)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Permet d'obtenir de l'aide pour une fonction " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Créez une variable `a` à laquelle vous affecterez le résultat du calcul $2*(3+ 2)$. Puis enlevez $1$ à la valeur de la variable `a`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 2*(3+2);\n", "a = a-1\n", "a\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En NumPy, les matrices et vecteurs sont representés par des variables de type np.array, dont le nombre de dimensions peut varier.\n", "\n", "Construisez un vecteur $v = (1, 2, −1, −2, 0, 5)$\n", "Vérifiez la taille et forme de ce vecteurs." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "v = np.array([1,2,-1,-2,0,5])\n", "v" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En mathématiques, il est important de distinguer les vecteurs colonnes des vecteurs lignes. Calculez un vecteur u correspondant à la version vecteur colonne de $v$. De même, construisez $w = u^\\top$. Essayez de le faire de plusieurs manières différentes afin de commencez à maitriser Numpy." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "u = v.reshape(6,1)\n", "print(u)\n", "u.shape\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "u = v.reshape(6,-1)\n", "print(u)\n", "u.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "u = v[:,np.newaxis]\n", "u.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "w = u.reshape(1,6)\n", "w.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "w = u.T\n", "w.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(v)\n", "print(v[::-2])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculez le vecteur de la différence $u^t − w$ (et vérifiez que $u = W^\n", "t$). Quelle est la nature mathématique de cet objet ? Essayez de calculer $u−w$. Pourquoi obtient-on cet objet ?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(u.T - w)\n", "print(u==w.T)\n", "u-w\n", "# le résultat calcule une matrice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "7. Extrayez la valeur de la deuxième composante des vecteur $u$ et $w$. Affectez à la variable $b$ la valeur de la dernière composante du vecteur $u$. Affectez à la variable $n$ la taille du vecteur $u$ (car $u \\in \\mathbb{R}^n$)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "u[1,0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "w[0,1]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b = u[-1,0]\n", "b" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "n = u.shape[0]\n", "n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Créez un vecteur $x = (v(0), v(5), v(2))$. Calculez la somme des éléments de $x$. (en cas de doute sur la nature d’une fonction, faites `help(np.sum)`)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = v[[0,5,2]]\n", "print(x)\n", "np.sum(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Créez un vecteur $y = (v(1), . . . , v(4))$, un vecteur avec 4 éléments." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(v)\n", "y = v[1:5]\n", "y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculez la somme cumulée des éléments du vecteur $u$. Quelle est la taille de cet object ? Affectez le résultat de ce calcul à une nouvelle variable $c$. Que signifie RTFM ?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(u.cumsum())\n", "c=u.cumsum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Créez un nouveau vecteur $t = (1, 1, 1, 0, 0, −1, −1, 1, 1, 1)$. Que fait l’instruction diff(t)? (Si vous n’avez pas fait `help(diff)` c’est que quelque chose vous échappe)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "help(np.diff)\n", "t = np.array([[1,1,1,0,0,-1,-1,1,1,1]])\n", "np.diff(t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculez les modalités de t dans une variable m." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "m = np.unique(t)\n", "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Que fait l’instruction t==m[0] ? Comptez les effectifs de chaque modalité de t\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np.sum(t==m[0])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np.sum(t==m[1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np.sum(t==m[2])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Refaire la même chose avec une boucle en utilisant l’instruction for. vérifiez que les résultats sont bien les mêmes." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for i in range(3):\n", " print(np.sum(t==m[i]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Créez la matrice\n", "$A = \\begin{pmatrix}\n", "1 & 2 & 3\\\\\n", "4 & 5 & 6\\\\\n", "−1 & 0 & 1\\\\\n", "1 & 1 & 2\n", "\\end{pmatrix}$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = np.array([\n", " [1, 2, 3],\n", " [4, 5, 6],\n", " [-1, 0, 1],\n", " [1, 1, 2]\n", "])\n", "A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Quelle est la deuxième colonne de A ? Créez un vecteur s composé de la troisième ligne de A." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[0,0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s = A[2, :]\n", "s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Créer un vecteur contenant 60 valeurs également réparties croissantes dans l'intervalle $[0, 2\\pi]$ Que fait l’instructions plt.plot(t). Expliquez la différence entre plt.plot(a) et plt.plot(a,b)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = np.array(np.linspace(0, 2*np.pi, 60))\n", "t" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt \n", "plt.plot(np.sin(t.T)[::10])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(np.sin(t.T),np.cos(t.T),'o')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion\n", "\n", "Pour conclure ce TP d'introduction à Numpy, suivez bien l'ensemble du tutoriel présenté au début : https://numpy.org/doc/stable/user/absolute_beginners.html\n", "Pour aller plus loin : \n", "- https://numpy.org/doc/stable/user/basics.html\n", "- Des exercices : https://github.com/rougier/numpy-100/blob/master/100_Numpy_exercises.ipynb\n", "- et encore plus loin : https://www.labri.fr/perso/nrougier/from-python-to-numpy/" ] } ], "metadata": { "kernelspec": { "display_name": "ml_env", "language": "python", "name": "ml_env" }, "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.10.6" } }, "nbformat": 4, "nbformat_minor": 4 }