import%20marimo%0A%0A__generated_with%20%3D%20%220.23.16%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Modules%20et%20biblioth%C3%A8ques%2C%20introduction%20%C3%A0%20%60numpy%60%2C%20%60scipy%60%20et%20%60matplotlib%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%201.%20Modules%0A%0A%20%20%20%20%23%23%23%201.1.%20D%C3%A9finition%20et%20utilisation%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Module%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Un%20module%20est%20un%20fichier%20script%20Python%20(donc%20avec%20l%E2%80%99extension%20%60.py%60)%20contenant%20des%20d%C3%A9finitions%20de%20fonctions%2C%20des%20variables%20globales%2C%20etc...%20Ce%20fichier%20est%20plac%C3%A9%20dans%20le%20m%C3%AAme%20dossier%20que%20le%20fichier%20.py%20en%20cours%20ou%20dans%20un%20fichier%20accessible%20par%20l%E2%80%99interpr%C3%A9teur.%0A%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20Pour%20utiliser%20une%20fonction%20d%E2%80%99un%20module%2C%20il%20faut%20au%20pr%C3%A9alable%2C%20importer%20le%20module.%20Les%20syntaxes%20g%C3%A9n%C3%A9rales%20d%E2%80%99importation%20de%20module%20sont%20%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20import%20nom_module%0A%20%20%20%20%60%60%60%0A%20%20%20%20ou%0A%20%20%20%20%60%60%60%0A%20%20%20%20import%20nom_module%20as%20alias%0A%20%20%20%20%60%60%60%0A%0A%20%20%20%20Le%20nom%20du%20fichier%20devient%20un%20espace%20de%20nom%20(c%E2%80%99est-%C3%A0-dire%20une%20collection%20de%20noms%20de%20variables%2C%20noms%20de%20fonctions%2C%20noms%20de%20classe).%20Les%20variables%20et%20les%20fonctions%20sont%20accessibles%20avec%20les%20syntaxes%0A%20%20%20%20%60%60%60%0A%20%20%20%20module.nom_fonction()%0A%20%20%20%20%60%60%60%0A%20%20%20%20ou%2C%20lorsqu'on%20utilise%20un%20alias%2C%0A%20%20%20%20%60%60%60%0A%20%20%20%20alias.nom_fonction()%0A%20%20%20%20%60%60%60%0A%0A%20%20%20%20Par%20exemple%2C%20voici%20le%20contenu%20du%20fichier%20%60mymodule.py%60%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20%23%20module%20Python%20qui%20contient%20deux%20fonctions%3A%20une%20fonction%20somme%20et%20une%20version%20r%C3%A9cursive%20de%20la%20suite%20de%20Fibonacci.%0A%0A%20%20%20%20def%20somme(a%2Cb)%20%3A%0A%20%20%20%20%20%20%20%20return%20a%2Bb%0A%0A%20%20%20%20def%20fibo_rec(n)%3A%0A%20%20%20%20%20%20%20%20if%20n%20%3C%3D%201%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20n%0A%20%20%20%20%20%20%20%20else%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20fibo_rec(n-1)%20%2B%20fibo_rec(n-2)%0A%20%20%20%20%60%60%60%0A%20%20%20%20Et%20son%20utilisation%20dans%20un%20autre%20script%20Python%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20import%20mymodule%0A%20%20%20%20a%2C%20b%20%3D%2010%2C%2023%0A%20%20%20%20print(f%22resultat%20%3D%20%7Bmymodule.somme(a%2Cb)%7D%22)%0A%20%20%20%20%60%60%60%0A%20%20%20%20La%20version%20avec%20alias%20devient%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20import%20mymodule%20as%20mym%0A%20%20%20%20a%2C%20b%20%3D%2010%2C%2023%0A%20%20%20%20print(f%22resultat%20%3D%20%7Bmym.somme(a%2Cb)%7D%22)%0A%20%20%20%20%60%60%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.2.%20Biblioth%C3%A8ques%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Biblioth%C3%A8ques%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Les%20_biblioth%C3%A8ques_%20(ou%20_paquets_%2C%20ou%20_packages_%2C%20_libraries_%2C%20_lib_%20en%20anglais)%20sont%20des%20collections%20de%20modules.%20Elles%20sont%20assembl%C3%A9es%20dans%20un%20m%C3%AAme%20dossier%2C%20contenant%20le%20fichier%20obligatoire%20_init_.py%20pouvant%20%C3%AAtre%20vide.%20Ce%20fichier%20initialise%20la%20biblioth%C3%A8que.%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20On%20peut%20importer%20un%20module%20d%E2%80%99un%20paquet%20avec%20l%E2%80%99instruction%0A%20%20%20%20%60%60%60%0A%20%20%20%20import%20paquet.module%0A%20%20%20%20%60%60%60%0A%20%20%20%20On%20peut%20importer%20une%20fonction%20d%E2%80%99un%20module%20d%E2%80%99un%20paquet%20avec%20l%E2%80%99instruction%0A%20%20%20%20%60%60%60%0A%20%20%20%20from%20paquet.module%20import%20nom_fonction%0A%20%20%20%20%60%60%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.3.%20Quelques%20exemples%0A%0A%20%20%20%20Il%20existe%20en%20Python%20tout%20un%20tas%20de%20modules%20et%20de%20librairies%20cod%C3%A9es%20par%20la%20communaut%C3%A9%20pour%20apporter%20aux%20utilisateur%E2%8B%85trice%E2%8B%85s%20des%20impl%C3%A9mentations%20optimis%C3%A9es%20de%20fonctions%20de%20base.%20On%20pr%C3%A9sente%20ci-dessous%20quelques%20exemples%20de%20modules%20et%20biblioth%C3%A8ques%20parmi%20les%20plus%20utilis%C3%A9es.%20Vous%20trouverez%20plus%20de%20d%C3%A9tails%20sur%20https%3A%2F%2Fdocs.python.org%2F3%2Flibrary%2Findex.html%0A%0A%20%20%20%20%7C%20**Nom**%20%7C%20**Description**%20%7C%0A%20%20%20%20%7C%3A-------%3A%7C%3A---------------%3A%7C%0A%20%20%20%20%7C%20%60os%60%2C%20%60sys%60%20%7C%20utilisation%20du%20syst%C3%A8me%20%7C%0A%20%20%20%20%7C%20%60calendar%60%2C%20%60datetime%60%2C%20%60time%60%20%7C%20gestion%20des%20dates%20et%20du%20temps%20%7C%0A%20%20%20%20%7C%20%60math%60%20%7C%20utilisation%20de%20fonctions%20math%C3%A9matiques%20%7C%0A%20%20%20%20%7C%20%60random%60%20%7C%20g%C3%A9n%C3%A9ration%20al%C3%A9atoire%20%7C%0A%20%20%20%20%7C%20%60pandas%60%20%7C%20biblioth%C3%A8que%20de%20statistique%20%7C%0A%20%20%20%20%7C%20%60scikit-learn%60%20%7C%20biblioth%C3%A8que%20de%20machine%20learning%20%7C%0A%20%20%20%20%7C%20%60matplotlib%60%20%7C%20biblioth%C3%A8que%20de%20graphes%20%7C%0A%20%20%20%20%7C%20%60numpy%60%20%7C%20biblioth%C3%A8que%20de%20calcul%20scientifique%20de%20base%20%7C%0A%20%20%20%20%7C%20%60scipy%60%20%7C%20biblioth%C3%A8que%20de%20calcul%20scientifique%20avanc%C3%A9%20%7C%0A%0A%20%20%20%20Nous%20verrons%20plus%20tard%20l'exemple%20des%20biblioth%C3%A8ques%20%60numpy%60%2C%20%60scipy%60%20et%20%60matplotlib%60%2C%20tr%C3%A8s%20utilis%C3%A9es%20en%20math%C3%A9matiques.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.%20Les%20modules%20%60calendar%60%2C%20%60datetime%60%20et%20%60time%60%0A%0A%20%20%20%20Ces%20modules%20permettent%20de%20g%C3%A9rer%20les%20dates%2C%20les%20temps%20et%20les%20calendriers.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20calendar%2C%20datetime%2C%20time%0A%0A%20%20%20%20return%20calendar%2C%20datetime%2C%20time%0A%0A%0A%40app.cell%0Adef%20_(datetime)%3A%0A%20%20%20%20debut%20%3D%20datetime.datetime(2032%2C%2011%2C%203%2C%2014%2C%201%2C%2030)%0A%20%20%20%20print(debut)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(time)%3A%0A%20%20%20%20help(time.time)%20%23%20la%20fonction%20time.time()%20renvoie%20le%20nombre%20de%20seconde%20depuis%20Epoch%20(1er%20Janvier%201970)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(time)%3A%0A%20%20%20%20t1%20%3D%20time.time()%0A%20%20%20%20sum_sq%20%3D%200%0A%20%20%20%20for%20k%20in%20range(1%2C10001)%3A%0A%20%20%20%20%20%20%20%20sum_sq%20%2B%3D%201%2Fk**2%0A%20%20%20%20t2%20%3D%20time.time()%0A%0A%20%20%20%20%23%20on%20calcule%20la%20diff%C3%A9rence%20de%20seconde%20entre%20les%20deux%20appels%20%C3%A0%20time.time()%20!%0A%20%20%20%20print(%22Calculer%20la%20somme%20a%20pris%20%3A%22%2C%20t2-t1%2C%20%22secondes%20!%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(time)%3A%0A%20%20%20%20print(time.asctime(time.gmtime(0)))%0A%20%20%20%20print(time.gmtime(0))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(calendar%2C%20datetime)%3A%0A%20%20%20%20mardi_precedent%20%3D%20datetime.date.today()%0A%20%20%20%20un_jour%20%3D%20datetime.timedelta(days%3D1)%0A%20%20%20%20while%20mardi_precedent.weekday()%20!%3D%20calendar.TUESDAY%3A%0A%20%20%20%20%20%20%20%20mardi_precedent%20-%3D%20un_jour%0A%20%20%20%20print(mardi_precedent)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%203.%20Les%20modules%20%60math%60%20et%20%60cmath%60%0A%0A%20%20%20%20Le%20module%20%60math%60%20permet%20d'utiliser%20plein%20de%20fonctions%20standards%20en%20math%C3%A9matiques%20qui%20ne%20sont%20pas%20pr%C3%A9sentes%20par%20d%C3%A9faut.%20Le%20module%20%60cmath%60%20d%C3%A9fini%20quant%20%C3%A0%20lui%20de%20nombreuses%20fonctions%20utiles%20pour%20les%20nombres%20complexes.%0A%0A%20%20%20%20On%20commence%20par%20importer%20le%20module%20%60math%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20math%0A%0A%20%20%20%20return%20(math%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20alors%20appeler%20les%20fonctions%20ou%20variables%20d%C3%A9finies%20dans%20cette%20librairie%20en%20les%20pr%C3%A9c%C3%A9dant%20de%20%60math.%60%20%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(math)%3A%0A%20%20%20%20print(math.pi)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20aussi%20utiliser%20un%20alias%20ou%20importer%20uniquement%20les%20fonctions%20et%20variables%20n%C3%A9cesaires.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20math%20as%20m%0A%20%20%20%20print(m.pi)%0A%20%20%20%20return%20(m%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20math%20import%20pi%20%23%20on%20importe%20la%20variable%20pi%20dans%20notre%20script%0A%20%20%20%20print(pi)%20%23%20plus%20besoin%20de%20suffixe%20!%0A%20%20%20%20return%20(pi%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Quelques%20exemples%20de%20fonctions%20usuelles%20accessibles%20dans%20les%20modules%20%60math%60%20et%20%60cmath%60%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(m%2C%20pi)%3A%0A%20%20%20%20print(m.sqrt(4))%0A%20%20%20%20print(m.cos(3*pi))%0A%20%20%20%20print(m.sin(pi))%20%20%20%20%23%20ne%20renvoie%20pas%20strictement%200%20mais%20plut%C3%B4t%20le%20zero%20%22num%C3%A9rique%22%20li%C3%A9%20%C3%A0%20la%20pr%C3%A9cision%20en%20virgule%20flottante%0A%20%20%20%20print(m.exp(12))%0A%20%20%20%20print(m.log(m.e))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20cmath%20as%20cm%0A%20%20%20%20z_1%20%3D%203%20%2B%201j%20%20%20%23%20forme%20alg%C3%A9brique%20d'un%20nombre%20complexe...%0A%20%20%20%20cm.polar(z_1)%20%20%23%20...%20puis%20forme%20polaire%20!%0A%20%20%20%20return%20(cm%2C)%0A%0A%0A%40app.cell%0Adef%20_(cm%2C%20m)%3A%0A%20%20%20%20print(m.pi%2F2)%0A%20%20%20%20cm.polar(1j)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Pour%20plus%20de%20d%C3%A9tails%20sur%20ces%20modules%2C%20on%20pourra%20consulter%20leur%20documentation%20officielle%3A%0A%20%20%20%20-%20module%20%60math%60%20https%3A%2F%2Fdocs.python.org%2F3%2Flibrary%2Fmath.html%0A%20%20%20%20-%20module%20%60cmath%60%20https%3A%2F%2Fdocs.python.org%2F3%2Flibrary%2Fcmath.html%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%204.%20La%20biblioth%C3%A8que%20%60numpy%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%60numpy%60%20est%20LE%20module%20fondamental%20pour%20le%20calcul%20scientifique%20en%20%60Python%60%20que%20nous%20allons%20%C3%AAtre%20ammen%C3%A9%20%C3%A0%20utiliser%20de%20fa%C3%A7on%20syst%C3%A9matique%20par%20la%20suite.%0A%0A%20%20%20%20**Pourquoi%20%3F**%20Car%20il%20met%20en%20place%20les%20structures%20de%20types%20tableaux%20optimis%C3%A9es%20%3A%20vecteurs%2C%20matrices%20et%20tableaux%20%C3%A0%20n%20dimensions.%0A%0A%20%20%20%20**Comment%20%3F**%20C'est%20plus%20efficace%20que%20les%20listes%20qu'on%20a%20vues%20auparavant%20et%20qui%20pourraient%20faire%20le%20job%20mais%20dans%20%60numpy%60%2C%20c'est%20optimis%C3%A9%20car%20les%20tableaux%0A%20%20%20%20-%20contiennent%20des%20donn%C3%A9es%20d'un%20type%20unique%20(contrairement%20aux%20listes%20Python)%3B%0A%20%20%20%20-%20ont%20une%20taille%20fix%C3%A9e%20%C3%A0%20la%20cr%C3%A9ation%3A%20changer%20de%20tailles%20au%20cours%20de%20l'ex%C3%A9cution%20aura%20comme%20cons%C3%A9quence%20de%20cr%C3%A9er%20un%20nouveau%20tableau%20et%20de%20supprimer%20l'original.%0A%0A%20%20%20%20Ainsi%2C%20on%20a%0A%20%20%20%20-%20acc%C3%A8s%20aux%20%C3%A9l%C3%A9ments%20en%20temps%20constant%3B%0A%20%20%20%20-%20des%20op%C3%A9rations%20alg%C3%A9briques%20sur%20les%20tableaux%20plus%20rapides%20que%20pour%20les%20listes.%0A%0A%20%20%20%20Ce%20doit%20%C3%AAtre%20le%20module%20de%20choix%20pour%20travailler%20sur%20des%20tableaux%20de%20donn%C3%A9es%20de%20type%20homog%C3%A8ne.%20Cette%20section%20est%20peut-%C3%AAtre%20la%20plus%20importante%20de%20ce%20cours%20%3A%20lisez-l%C3%A0%20avec%20attention%2C%20en%20particulier%20si%20vous%20envisagez%20de%20passer%20l'agr%C3%A9gation.%0A%0A%20%20%20%20Cette%20section%20n'est%20pas%20exhaustive%2C%20on%20pourra%20se%20r%C3%A9f%C3%A9rer%20%C3%A0%20la%20documentation%20si%20besoin%3A%20https%3A%2F%2Fnumpy.org%2Fdoc%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy%20as%20np%20%23%20np%20est%20l'alias%20unaninement%20admis%20dans%20la%20communaut%C3%A9%20pour%20importer%20numpy%0A%0A%20%20%20%20return%20(np%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.1.%20Cr%C3%A9ation%20et%20attributs%20%2F%20m%C3%A9thodes%20des%20tableaux%0A%0A%20%20%20%20Les%20tableaux%20(%60array%60)%20sont%20les%20principaux%20objets%20d%C3%A9finis%20par%20%60numpy%60.%20On%20les%20d%C3%A9finit%20avec%20%60np.array(...)%60%20avec%20en%20arguments%20une%20liste%20d'%C3%A9l%C3%A9ments%20de%20m%C3%AAme%20type%20(et%20de%20m%C3%AAme%20taile%20si%20les%20%C3%A9l%C3%A9ments%20eux-m%C3%AAmes%20sont%20des%20listes).%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20a_4%20%3D%20np.array(%5B%5B8%2C%203%2C%202%2C%204%5D%2C%20%5B5%2C%201%2C%206%2C%200%5D%2C%20%5B9%2C%207%2C%204%2C%201%5D%5D)%20%20%23%20%C3%A0%20partir%20de%20(liste%20de)%20listes%20--%3E%20matrice%203x4%20ici%0A%20%20%20%20print(a_4)%0A%20%20%20%20print(type(a_4))%20%20%23%20%20%3Cclass%20'numpy.ndarray'%3E%20%20Et%20ne%20pas%20confondre%20avec%20...%0A%20%20%20%20print(a_4.dtype)%20%20%23%20...%20int64%20%20%20%3A%20le%20type%20des%20%C3%A9l%C3%A9ments%20de%20a%0A%20%20%20%20return%20(a_4%2C)%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.array(%5B%5B1%2C%202%2C%203%5D%2C%20%5B1%2C%202%5D%5D)%20%23%23%20erreur%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.array(1%2C%202%2C%203)%20%23%23%20erreur%20aussi%2C%20il%20faut%20toujours%20un%20seul%20argument%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20R%C3%A9ciproquement%2C%20on%20peut%20transformer%20un%20tableau%20numpy%20en%20(liste%20de)%20listes%20avec%20%60.tolist()%60.%20Noter%20la%20diff%C3%A9rence%20d'affichage%20entre%20%60a%60%20et%20%60b%60%20%3A%20c'est%20parce%20qu'ils%20sont%20de%20type%20diff%C3%A9rent%20!%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_4)%3A%0A%20%20%20%20b_4%20%3D%20a_4.tolist()%0A%20%20%20%20print(b_4)%0A%20%20%20%20print(a_4)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Attributs%20%2F%20fonctions%20sur%20la%20%22forme%22%20d'un%20tableau%20%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_4)%3A%0A%20%20%20%20a_4.shape%20%20%23%20tuple%20du%20nbre%20d'%C3%A9l%C3%A9ments%20dans%20chaque%20%22direction%22%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_4)%3A%0A%20%20%20%20len(a_4)%20%20%23%20la%20taille%20de%20la%20premi%C3%A8re%20direction%20d'un%20tableau%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_4)%3A%0A%20%20%20%20a_4.size%20%20%23%20nbre%20total%20d'%C3%A9l%C3%A9ments%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_4%2C%20np)%3A%0A%20%20%20%20np.size(a_4%2C%200)%20%20%23%20nbre%20de%20lignes%20et%20...%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_4%2C%20np)%3A%0A%20%20%20%20np.size(a_4%2C%201)%20%20%23%20...%20de%20colonnes.%20Dans%20cet%20ordre%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_4)%3A%0A%20%20%20%20a_4.ndim%20%20%23%20nbre%20de%20dims%20d'un%20tableau%20%3D%20son%20%22rang%22%2C%20dit-on%20parfois%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_4%2C%20np)%3A%0A%20%20%20%20(a_4.shape%2C%20np.shape(a_4))%20%23%20shape%2C%20size%20et%20ndim%20peuvent%20%C3%AAtre%20appel%C3%A9es%20comme%20m%C3%A9thodes%20ou%20fonctions%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Le%20data%20type%20d'un%20tableau%20s'adapte%20%C3%A0%20ce%20que%20mange%20%60array%60.%20On%20peut%20forcer%20%22vers%20le%20haut%22%20le%20data%20type%20sachant%20que%20%24%5Cmathbb%7BZ%7D%5Csubset%5Cmathbb%7BR%7D%5Csubset%5Cmathbb%7BC%7D%24%20%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20b_5%20%3D%20np.array(%5B%5B8%2C%203%2C%202%2C%204%5D%2C%20%5B5.0%2C%201%2C%206%2C%200%5D%2C%20%5B9%2C%207%2C%204%2C%201%5D%5D)%20%20%23%20comme%20a%20sauf%205%20%E2%86%92%205.0%0A%20%20%20%20print(b_5%2C%20b_5.dtype)%20%20%23%20float64%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20c_3%20%3D%20np.array(%5B%5B8%2C%203%2C%202%2C%204%5D%2C%20%5B5%2C%201%2C%206%2C%200%5D%2C%20%5B9%2C%207%2C%204%2C%201%5D%5D%2C%20dtype%3Dcomplex)%0A%20%20%20%20print(c_3%2C%20c_3.dtype)%0A%20%20%20%20return%20(c_3%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Pour%20les%20tableaux%20de%20complexes%2C%20on%20a%20%60.conj()%60%2C%20%60abs()%60%20et%20%60.angle()%60%20pour%20r%C3%A9cup%C3%A9rer%20le%20conjugu%C3%A9%2C%20module%2C%20argument%20respectivement%20et%20bien%20s%C3%BBr%20%60.real%60%20et%20%60.imag%60%20pour%20r%C3%A9cup%C3%A9rer%20les%20parties%20R%C3%A9elle%20et%20Imaginaire.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(c_3)%3A%0A%20%20%20%20c_3.real%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(c_3)%3A%0A%20%20%20%20c_3.imag%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(c_3)%3A%0A%20%20%20%20c_3.conj()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(c_3%2C%20np)%3A%0A%20%20%20%20np.abs(c_3)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.2.%20Extraction%20et%20slicing%0A%0A%20%20%20%20Comme%20pour%20les%20listes%20and%20co%2C%20on%20peut%20utiliser%20le%20slicing%20avec%20les%20arrays.%20On%20rappelle%20que%20la%20syntaxe%20g%C3%A9n%C3%A9rale%20est%0A%20%20%20%20%60%60%60%0A%20%20%20%20d%C3%A9but%20(inclu)%3A%20fin%20(exclu)%20%5B%3A%20pas%20(optionnel%20et%20possiblement%20n%C3%A9gatif)%5D%0A%20%20%20%20%60%60%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Par%20exemple%2C%20pour%20un%20vecteur%20cela%20donne%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20v_2%20%3D%20np.array(range(0%2C%20160%2C%2010))%0A%20%20%20%20v_2%0A%20%20%20%20return%20(v_2%2C)%0A%0A%0A%40app.cell%0Adef%20_(v_2)%3A%0A%20%20%20%20v_2%5B0%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(v_2)%3A%0A%20%20%20%20v_2%5B1%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(v_2)%3A%0A%20%20%20%20v_2%5B-1%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(v_2)%3A%0A%20%20%20%20v_2%5B-2%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(v_2)%3A%0A%20%20%20%20v_2%5B4%3A10%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(v_2)%3A%0A%20%20%20%20v_2%5B%3A6%3A-1%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Et%20pour%20une%20matrice...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20m_1%20%3D%20np.array(%5B%5B10%20*%20i%20%2B%20j%20for%20j%20in%20range(8)%5D%20for%20i%20in%20range(5)%5D)%0A%20%20%20%20%23%20noter%20la%20d%C3%A9finition%20par%20compr%C3%A9hension%0A%20%20%20%20m_1%0A%20%20%20%20return%20(m_1%2C)%0A%0A%0A%40app.cell%0Adef%20_(m_1)%3A%0A%20%20%20%20m_1%5B3%2C%205%5D%20%20%23%20%C3%A9l%C3%A9ment%204me%20ligne%2C%206me%20colonne%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(m_1)%3A%0A%20%20%20%20m_1%5B3%5D%20%20%23%20la%20quatri%C3%A8me%20ligne%20%22en%20entier%22%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(m_1)%3A%0A%20%20%20%20m_1%5B3%2C%20%3A%5D%20%20%23%20la%20quatri%C3%A8me%20ligne%20en%20entier%20(%C3%A9quivalent%20%C3%A0%20la%20cellule%20pr%C3%A9c%C3%A9dent)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(m_1)%3A%0A%20%20%20%20m_1%5B%3A%2C%205%5D%20%20%23%20la%20sixi%C3%A8me%20colonne%20en%20entier%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(m_1)%3A%0A%20%20%20%20m_1%5B%3A%3A-1%5D%20%20%23%20inverser%20les%20lignes%20en%20notation%20%22non%20sym%C3%A9trique%22%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(m_1)%3A%0A%20%20%20%20m_1%5B%3A%2C%20%3A%3A-1%5D%20%20%23%20inverser%20les%20colonnes%20%22pas%20le%20choix%22%20de%20notation%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Copies%20de%20tableaux%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Comme%20pour%20les%20listes%2C%20si%20%60a%60%20est%20un%20tableau%20%60numpy%60%2C%20faire%20%60b%20%3D%20a%60%2C%20ne%20cr%C3%A9%C3%A9%20pas%20une%20copie%20de%20%60a%60%20dans%20%60b%60.%20En%20%60Python%60%2C%20%60b%60%20%22pointe%22%20sur%20le%20m%C3%AAme%20tableau%20(la%20m%C3%AAme%20adresse%20m%C3%A9moire)%20que%20%60a%60%2C%20c'est%20une%20%22vue%22%20sur%20%60a%60.%20Si%20on%20modifie%20%60b%60%2C%20cela%20modifie%20%60a%60.%20Inversement%2C%20si%20on%20modifie%20%60a%60%2C%20on%20modifie%20aussi%20%60b%60%2C%20c'est%20logique.%0A%0A%20%20%20%20Pour%20vraiment%20copier%20dans%20%60b%60%2C%20il%20faut%20faire%20%60b%20%3D%20a.copy()%60%0A%0A%20%20%20%20Attention%2C%20cette%20notion%20de%20vue%20a%20aussi%20lieu%20en%20affectant%20des%20slices%20!%20Si%60%20b%20%3D%20a%5B1%3A4%2C2%3A6%5D%60%2C%20toute%20modification%20de%20%60b%60%20va%20se%20voir%20dans%20%60a%60%20et%20inversement.%0A%0A%20%20%20%20**Conclusion%20%3A**%20_contrairement%20aux%20listes_%20%22slicer%22%20un%20tableau%20ne%20cr%C3%A9%C3%A9%20pas%20une%20copie%2C%20c'est%20juste%20une%20%22vue%22.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20a_62%20%3D%20%5Bi%20for%20i%20in%20range(3%2C9)%5D%0A%20%20%20%20cop%20%3D%20a_62%5B%3A%5D%0A%20%20%20%20print(a_62)%0A%20%20%20%20print(cop)%0A%20%20%20%20cop%5B2%5D%20%3D%2042%0A%20%20%20%20print(cop)%0A%20%20%20%20print(a_62)%20%23%20a_6%20n'a%20pas%20chang%C3%A9%20car%20on%20travaille%20avec%20des%20listes%0A%0A%20%20%20%20print(%22%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%22)%0A%20%20%20%20a_62%20%3D%20np.array(%5Bi%20for%20i%20in%20range(3%2C9)%5D)%0A%20%20%20%20cop%20%3D%20a_62%5B%3A%5D%0A%20%20%20%20print(a_62)%0A%20%20%20%20print(cop)%0A%20%20%20%20cop%5B2%5D%20%3D%2042%0A%20%20%20%20print(cop)%0A%20%20%20%20print(a_62)%20%23%20a_6%20a%20chang%C3%A9%20car%20on%20travaille%20avec%20des%20tableaux%2C%20et%20le%20slicing%20ne%20cr%C3%A9%C3%A9%20pas%20de%20copies%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.3.%20Affectation%0A%0A%20%20%20%20a)%20le%20cas%20des%20vecteurs%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(v_2)%3A%0A%20%20%20%20print('Rappel%20de%20v%20%3A'%2C%20v_2)%0A%20%20%20%20print(v_2.dtype)%20%23%20--%3E%20c'est%20un%20tableau%20d'entiers%0A%20%20%20%20v_2%5B3%5D%20%3D%20999%0A%20%20%20%20%23%20Attention%20!!%20%3A%20si%20v.dtype%20%3D%20int%20alors%0A%20%20%20%20print(v_2)%0A%20%20%20%20v_2%5B2%5D%20%3D%201.77%0A%20%20%20%20print(v_2)%20%23%20n'affecte%20que%201%20car%20le%20.77%20est%20tronqu%C3%A9%20pour%20caster%20un%20int%3A%20le%20dtype%20est%20fix%C3%A9%20%C3%A0%20la%20cr%C3%A9ation%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20bien%20s%C3%BBr%20affecter%20plusieurs%20valeurs%20%C3%A0%20la%20fois%20dans%20%60v%60%20sous%20r%C3%A9serve%20que%20ce%20qui%20est%20%C3%A0%20droite%20a%20la%20m%C3%AAme%20taille%20qu'%C3%A0%20gauche%20!%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20v_2)%3A%0A%20%20%20%20v_2%5B%3A%3A2%5D%20%3D%20np.ones(8)%20%20%23%20ones%20est%20un%20vecteur%20de%201%2C%20ici%20de%20taille%208%20%3A%20on%20y%20reviendra%0A%20%20%20%20print(v_2)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20b)%20le%20cas%20des%20matrices%20%3A%20fonctionne%20de%20la%20m%C3%AAme%20fa%C3%A7on%20que%20pour%20les%20vecteurs%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20m_2%20%3D%20np.array(%5B%5B10%20*%20i%20%2B%20j%20for%20j%20in%20range(4)%5D%20for%20i%20in%20range(3)%5D)%0A%20%20%20%20print(m_2)%0A%20%20%20%20m_2%5B2%5D%20%3D%20%5B6%2C%207%2C%208%2C%209%5D%20%20%23%20on%20change%20une%20ligne%20enti%C3%A8re%0A%20%20%20%20print(m_2)%0A%20%20%20%20m_2%5B%3A%2C%201%5D%20%3D%20%5B44%2C%2055%2C%2066%5D%20%20%23%20et%20une%20colonne%20enti%C3%A8re%0A%20%20%20%20print(m_2)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.4.%20Tableaux%20g%C3%A9n%C3%A9riques%0A%0A%20%20%20%20On%20pr%C3%A9sente%20dans%20cette%20section%20toute%20une%20liste%20de%20tableaux%20g%C3%A9n%C3%A9riques%20et%20comment%20les%20obtenir%20avec%20%60numpy%60.%0A%0A%20%20%20%20%23%23%23%23%20a)%20Tableaux%20constants%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20a_5%20%3D%20np.zeros(5)%20%20%23%20un%20vecteur%20de%205%20z%C3%A9ros%20%3B%20cr%C3%A9%C3%A9%20en%20float%20par%20d%C3%A9faut%0A%20%20%20%20print(a_5)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%23%20matrice%205x3%20de%20z%C3%A9ros%20%3A%20utiliser%20un%20tuple%20!!%20noter%20qu'on%20peut%20sp%C3%A9cifier%20le%20type%2C%20ci-dessous%20entier%20pas%20de%20.%20dans%20le%20print%0A%20%20%20%20b_6%20%3D%20np.zeros((5%2C%203)%2C%20int)%0A%20%20%20%20print(b_6)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%23%20idem%20avec%20des%20uns%0A%20%20%20%20np.ones((2%2C4))%20%23%20matrice%202x4%20remplie%20de%201%2C%20par%20d%C3%A9faut%20en%20float%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%23%20on%20peut%20convertir%20les%200%20et%201%20en%20bool%3A%20False%20ou%20True%2C%20respectivement%0A%20%20%20%20bo_1%20%3D%20np.zeros((3%2C%203)%2C%20bool)%20%20%23%0A%20%20%20%20print(bo_1)%0A%20%20%20%20bo_1%20%3D%20np.ones((3%2C%203)%2C%20bool)%0A%20%20%20%20print(bo_1)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%23%20on%20peut%20remplir%20un%20tableau%20existant%0A%20%20%20%20a_6%20%3D%20np.array(%5B%5B1%2C%205%2C%203%5D%2C%20%5B2%2C%207%2C%204%5D%5D)%0A%20%20%20%20a_6.fill(1)%20%20%23%20est%20fait%20in%20place%0A%20%20%20%20print(a_6)%0A%20%20%20%20a_6.fill(3.14)%20%23%20le%20data%20type%20est%20invariant%2C%20donc%20%C3%A7a%20tronque%2C%20cf%20supra%20!%0A%20%20%20%20print(a_6)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20a_7%20%3D%20np.array(range(10)).reshape(2%2C%205)%20%23%20noter%20l'effet%20de%20reshape%0A%20%20%20%20print(a_7)%0A%20%20%20%20print(np.zeros_like(a_7))%20%20%23%20m%C3%AAme%20forme%20que%20a%2C%20remplie%20de%200%0A%20%20%20%20print(np.ones_like(a_7))%20%20%20%23%20m%C3%AAme%20forme%20que%20a%2C%20remplie%20de%201%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20print(np.array(%5B2%5D*5))%20%20%20%20%20%20%23%20utiliser%20la%20concat%C3%A9nation%20de%20liste%20pour%20remplir%20par%0A%20%20%20%20print(np.array(%5B1%2C2%5D*3))%20%20%20%20%23%20r%C3%A9p%C3%A9tition.%0A%20%20%20%20print(np.array(%5B%5B1%2C2%5D%5D*3))%20%20%23%20noter%20la%20subtilit%C3%A9%20entre%20les%202%20derni%C3%A8res%20instructions%20ligne%20v.s.%20colonne%20(avec%20double%20crochet)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20b)%20Matrices%20sp%C3%A9ciales%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.identity(4)%20%20%23%20matrice%20identit%C3%A9%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.eye(5)%20%23%20eye%20%3A%20diagonale%20et%20extra-diagonales%20de%201%20avec%20argument%20%22k%22%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.eye(4%2C%20k%3D-2)%20%23%20noter%20le%20d%C3%A9placement%20de%20la%20diagonale%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.eye(5%2C%207)%20%23%20on%20peut%20aussi%20le%20faire%20avec%20des%20matrices%20rectangulaires%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20a_8%20%3D%20np.array(range(25)).reshape(5%2C%205)%0A%20%20%20%20print(a_8)%0A%20%20%20%20np.diag(a_8)%20%23%20pour%20extraire%20la%20diagonale%20de%20a%0A%20%20%20%20return%20(a_8%2C)%0A%0A%0A%40app.cell%0Adef%20_(a_8%2C%20np)%3A%0A%20%20%20%20np.diag(a_8%2C%202)%20%20%23%20ou%20des%20extra-diagonales%20en%20donnant%20le%20d%C3%A9calage%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_8%2C%20np)%3A%0A%20%20%20%20np.diag(a_8%2C%20-3)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%23%20inversement%2C%20sur%20un%20vecteur%20(ou%20une%20liste%20ou%20un%20tuple)%20%3A%0A%20%20%20%20np.diag(%5B1%2C2%2C3%5D)%20%23%20donne%20une%20matrice%20de%20diagonale%20ce%20vecteur%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%23%20matrice%20triangulaire%20inf%C3%A9rieure%20remplie%20de%201%20sous%20une%20(extra-)diagonale%20k%0A%20%20%20%20np.tri(4)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.tri(4%2Ck%3D1)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.tri(4%2Ck%3D-1)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_8)%3A%0A%20%20%20%20print(a_8)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_8%2C%20np)%3A%0A%20%20%20%20np.tril(a_8)%20%20%23%20matrice%20triangulaire%20inf%C3%A9rieure%20induite%20par%20a%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_8%2C%20np)%3A%0A%20%20%20%20np.triu(a_8)%20%20%23%20idem%20%22sup%C3%A9rieure%22.%20Cf%20la%20doc%20pour%20les%20d%C3%A9calages%20d'extra-diag%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20c)%20Tableaux%20%C3%A9chelonn%C3%A9s%0A%0A%20%20%20%20Il%20s'agit%20de%20tableaux%20remplis%20de%20valeurs%20espac%C3%A9es%20r%C3%A9guli%C3%A8rement.%20Ils%20nous%20seront%20bien%20utiles%20par%20exemple%20pour%20afficher%20des%20courbes%20de%20fonctions%20%C3%A0%20partir%20de%20subdivisions%20uniformes%20de%20l'intervalle%20de%20d%C3%A9finition.%20Les%20deux%20fonctions%20les%20plus%20utiles%20sont%20%60arange%60%20(utilise%20le%20pas%20de%20la%20subdivision)%20et%20%60linspace%60%20(requiert%20le%20nombre%20de%20points%20voulus).%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.arange(10)%20%23%20par%20d%C3%A9faut%20%3A%20g%C3%A9n%C3%A8re%20des%20int%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.arange(100%2C%20200%2C%2020)%20%23%20d%C3%A9but%2C%20fin%2C%20pas%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.arange(10%2C%200%2C%20-1)%20%23%20%C3%A0%20l'envers%20(0%20exclu%20!)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.arange(8%2C%20dtype%3Dfloat)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.linspace(0%2C%20100%2C%204)%20%23%20d%C3%A9but%2C%20fin%2C%20nbre%20de%20%22poteaux%22%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.linspace(100%2C%200%2C%207)%20%23%20ordre%20d%C3%A9croissant%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20d)%20Tableaux%20al%C3%A9atoires%0A%0A%20%20%20%20On%20peut%20aussi%20remplir%20des%20tableaux%20avec%20des%20nombres%20al%C3%A9atoires%2C%20tir%C3%A9s%20selon%20des%20lois%20usuelles.%20Toutes%20les%20fonctions%20associ%C3%A9es%20se%20trouvent%20dans%20le%20module%20%60random%60%20de%20%60numpy%60.%20La%20fonction%20de%20base%20de%20ce%20module%2C%20%60rand()%60%2C%20tire%20un%20nombre%20al%C3%A9atoire%20dans%20%24%5B0%2C1%5D%24%20selon%20une%20loi%20uniforme.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy.random%20as%20rd%0A%0A%20%20%20%20print(rd.rand(5))%0A%20%20%20%20print(rd.rand(5%2C3))%0A%20%20%20%20return%20(rd%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Quelques%20fonctions%20utiles%20pour%20g%C3%A9n%C3%A9rer%20des%20nombres%20al%C3%A9atoires.%0A%0A%20%20%20%20%7C%20%60random%60%20%7C%20**Fonction%20math%C3%A9matique**%20%7C%0A%20%20%20%20%7C%3A--------%3A%7C%3A-------------------------%3A%7C%0A%20%20%20%20%7C%60rand(n1%2Cn2%2C...)%60%7Cdistribution%20uniforme%20dans%20%24%5B0%2C%201%5D%24%20sous%20forme%20de%20matrice%20de%20dimension%20%60n1%2C%20n2%2C...%60%7C%0A%20%20%20%20%7C%60random(taille)%60%7Cdistribution%20uniforme%20dans%20%24%5B0%2C%201%5D%24%20sous%20forme%20de%20matrice%20de%20dimensions%20donn%C3%A9es%20par%20le%20tuple%20%60taille%60%7C%0A%20%20%20%20%7C%60randn(n1%2Cn2%2C...)%60%7Cloi%20normale%20centr%C3%A9e%20r%C3%A9duite%20sous%20forme%20de%20matrice%20de%20dimension%20%60n1%2C%20n2%2C...%60%7C%0A%20%20%20%20%7C%60randint(max)%60%7Cun%20entier%20entre%200%20et%20max%E2%88%921%7C%0A%20%20%20%20%7C%60randint(min%2Cmax%2Ctaille)%60%7Ctableau%20d%E2%80%99entiers%20entre%20min%20et%20max%E2%88%921%20sous%20forme%20de%20matrice%20de%20dimensions%20donn%C3%A9es%20par%20le%20tuple%20%60taille%60%7C%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.5.%20Op%C3%A9rations%20sur%20les%20tableaux%0A%0A%20%20%20%20Enfin%2C%20on%20va%20d%C3%A9couvrir%20dans%20cette%20section%20comment%20faire%20des%20op%C3%A9rations%20sur%20les%20tableaux.%0A%0A%20%20%20%20%23%23%23%23%20a)%20Op%C3%A9rations%20termes%20%C3%A0%20termes%0A%0A%20%20%20%20On%20va%20commencer%20par%20les%20op%C3%A9rations%20qui%20modifient%20de%20la%20m%C3%AAme%20fa%C3%A7on%20tous%20les%20%C3%A9l%C3%A9ments%20du%20tableau%20(qu'il%20s'agisse%20d'un%20vecteur%20ou%20d'une%20matrice).%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Produits%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20%60a*a%60%20d%C3%A9signe%20le%20produit%20terme%20%C3%A0%20terme%20des%20%C3%A9l%C3%A9ments%20de%20%60a%60%20entre%20eux%2C%20pas%20un%20produit%20scalaire%20ou%20matriciel%20!%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20a_9%20%3D%20np.arange(1%2C%2010)%0A%20%20%20%20print(a_9)%0A%20%20%20%20print(a_9%20%2B%201)%20%20%20%20%23%20c'est%20comme%20si%201%20%C3%A9tait%20d%C3%A9velopp%C3%A9%20en%20un%20tableau%20rempli%20de%201%0A%20%20%20%20print(10%20*%20a_9)%20%20%20%23%20m%C3%AAme%20id%C3%A9e.%20On%20appelle%20%C3%A7a%20le%20%22broadcast%22%2C%20voir%20la%20doc%0A%20%20%20%20print(a_9%20*%20a_9)%20%20%23%20attention%2C%20c'est%20encore%20terme%20%C3%A0%20terme%20donc%20pas%20un%20prod%20matriciel%20math%0A%20%20%20%20return%20(a_9%2C)%0A%0A%0A%40app.cell%0Adef%20_(a_9)%3A%0A%20%20%20%20print(2%20**%20a_9)%20%20%23%202%20%C3%A0%20la%20puissance%20tous%20les%20%C3%A9l%C3%A9ments%20de%20a%0A%20%20%20%20print(1%20%2F%20a_9)%20%20%20%23%20vecteur%20des%20inverses%20(noter%20la%20transformation%20automatique%20en%20float)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%23%20c'est%20la%20m%C3%AAme%20chose%20avec%20des%20matrices%0A%20%20%20%20m_3%20%3D%20np.arange(15).reshape(3%2C%205)%0A%20%20%20%20print(m_3)%0A%20%20%20%20print(m_3%20%2B%2010)%0A%20%20%20%20print(m_3%20*%20m_3)%20%20%23%20ce%20n'est%20pas%20un%20produit%20matriciel%20!!%0A%20%20%20%20return%20(m_3%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Il%20y%20a%20tout%20ce%20qu'il%20faut%20dans%20%60numpy%60%20pour%20utiliser%20la%20plupart%20des%20fonctions%20standards%20sur%20des%20tableaux%20%3A%20les%20fonctions%20trigonom%C3%A9triques%2C%20hyperboliques%2C%20exponentielle%20et%20logarithme%2C%20puissance%2C%20min%20%2F%20max%2C%20etc...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_9%2C%20m_3%2C%20np)%3A%0A%20%20%20%20print(np.max(m_3))%0A%20%20%20%20print(np.cos(a_9))%20%23%20appliquer%20la%20fonction%20termes%20%C3%A0%20termes%20aux%20%C3%A9l%C3%A9ments%20de%20a%0A%20%20%20%20print(np.log(a_9))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Ci-dessous%2C%20un%20tableau%20avec%20quelques%20fonctions%20math%C3%A9matiques%20usuelles%20d%C3%A9finies%20dans%20%60numpy%60.%0A%0A%20%20%20%20%7C%20%60numpy%60%20%7C%20**Fonction%20math%C3%A9matique**%20%7C%0A%20%20%20%20%7C%3A-------%3A%7C%3A-------------------------%3A%7C%0A%20%20%20%20%7C%60square()%60%2C%20%60sqrt()%60%7Ccarr%C3%A9%20et%20racine%20carr%C3%A9%7C%0A%20%20%20%20%7C%60abs()%60%2C%20%60fabs()%60%7Cvaleur%20absolue%7C%0A%20%20%20%20%7C%60min()%60%2C%20%60max()%60%2C%20%60fmin()%60%2C%20%60fmax()%60%7Cminimum%20et%20maximum%7C%0A%20%20%20%20%7C%60sum()%60%2C%20%60prod()%60%7Csomme%20et%20produit%7C%0A%20%20%20%20%7C%60sin()%60%2C%20%60cos()%60%2C%20%60tan()%60%7Cfonctions%20sinus%2C%20cosinus%2C%20tangente%7C%0A%20%20%20%20%7C%60arcsin()%60%2C%20%60arccos()%60%2C%20%60arctan()%60%7Cles%20fonctions%20r%C3%A9ciproques%7C%0A%20%20%20%20%7C%60sinh()%60%2C%20%60cosh()%60%2C%20%60tanh()%60%7Cles%20fonctions%20hyperboliques%7C%0A%20%20%20%20%7C%60arcsinh()%60%2C%20%60arccosh()%60%2C%20%60arctanh()%60%7Cles%20r%C3%A9ciproques%7C%0A%20%20%20%20%7C%60exp()%60%2C%20%60exp2()%60%2C%20%60expm1()%60%7Cfonctions%20exponentielles%20(base%20%24e%24%20et%202)%20et%20la%20fonction%20%60exp()%E2%88%921%60%7C%0A%20%20%20%20%7C%60log()%60%2C%20%60log2()%60%2C%20%60log10()%60%7Cfonctions%20logarithmes%20(base%20%24e%24%20et%202%20et%2010)%7C%0A%20%20%20%20%7C%60real()%60%2C%20%60imag()%60%2C%20%60conj()%60%2C%20%60angle()%60%7Cpartie%20r%C3%A9elle%2C%20imaginaire%2C%20conjugu%C3%A9%2C%20argument%7C%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20b)%20Produits%20scalaires%20et%20matriciels%0A%0A%20%20%20%20Les%20produits%20entre%20vecteurs%20et%20%2F%20ou%20matrices%20au%20sens%20math%C3%A9matique%20du%20terme%20se%20font%20%C3%A0%20l'aide%20de%20la%20fonction%20%60np.dot(...)%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(a_9%2C%20np)%3A%0A%20%20%20%20np.dot(a_9%2C%20a_9)%20%20%23%20%3D%20%3Ca%2Ca%3E%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(m_3%2C%20np)%3A%0A%20%20%20%20print(m_3)%0A%20%20%20%20print(np.dot(m_3%2C%20m_3.transpose()))%20%20%23%20produit%20matriciel%20mm%5ET%0A%20%20%20%20print(np.dot(m_3%2C%20m_3))%20%20%23%23%20ERROR%20car%20la%20matrice%20m%20est%20rectangulaire%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(m_3%2C%20np)%3A%0A%20%20%20%20a_55%20%3D%20np.random.rand(5)%0A%20%20%20%20print(np.shape(m_3))%0A%20%20%20%20print(np.shape(a_55))%0A%20%20%20%20print(np.shape(np.dot(m_3%2C%20a_55)))%0A%20%20%20%20np.dot(m_3%2C%20a_55)%0A%20%20%20%20return%20(a_55%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(a_55%2C%20m_3)%3A%0A%20%20%20%20m_3%20%40%20a_55%20%23%20alternative%20pour%20le%20produit%20matrice%20vecteur%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20c)%20Sommes%2C%20produits%2C%20diff%C3%A9rences%0A%0A%20%20%20%20Comme%20pour%20les%20listes%2C%20on%20peut%20sommer%2C%20faire%20les%20produits%2C%20etc...%20des%20%C3%A9l%C3%A9ments%20d'un%20tableau%20%60numpy%60.%0A%0A%20%20%20%20%7C%20%60numpy%60%20%7C%20**Fonction%20math%C3%A9matique***%20%7C%0A%20%20%20%20%7C%3A-------%3A%7C%3A--------------------------%3A%7C%0A%20%20%20%20%7C%60sum(A)%60%7Csomme%20des%20%C3%A9l%C3%A9ments%20de%20%24A%24%7C%0A%20%20%20%20%7C%60diff(A)%60%7Cdiff%C3%A9rence%20des%20%C3%A9l%C3%A9ments%20de%20%24A%24%20(%60diff%5Bi%5D%20%3D%20A%5Bi%2B1%5D%20-%20A%5Bi%5D%60)%0A%20%20%20%20%7C%60prod(A)%60%7Cproduit%20des%20%C3%A9l%C3%A9ments%20de%20%24A%24%7C%0A%20%20%20%20%7C%60min(A)%60%7Cvaleur%20minimale%20de%20%24A%24%7C%0A%20%20%20%20%7C%60max(A)%60%7Cvaleur%20maximale%20de%20%24A%24%7C%0A%20%20%20%20%7C%60argmin(A)%60%7Cindice%20de%20la%20valeur%20minimale%20de%20%24A%24%7C%0A%20%20%20%20%7C%60argmax(A)%60%7Cindice%20de%20la%20valeur%20maximale%20de%20%24A%24%7C%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Optimisation%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Notons%20que%20les%20fonctions%20%60np.sum()%60%2C%20%60np.prod()%60%20sont%20beaucoup%20plus%20rapides%20que%20les%20fonctions%20%60sum%60%20et%20%60prod%60%20de%20Python.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(rd)%3A%0A%20%20%20%20tabb%20%3D%20rd.rand(10000000)%0A%20%20%20%20return%20(tabb%2C)%0A%0A%0A%40app.cell%0Adef%20_(tabb%2C%20time)%3A%0A%20%20%20%20start%20%3D%20time.time()%0A%20%20%20%20sum(tabb)%0A%20%20%20%20end%20%3D%20time.time()%0A%20%20%20%20print(%22Temps%20calcul%20%3D%20%22%2C%20end-start)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20tabb%2C%20time)%3A%0A%20%20%20%20start_np%20%3D%20time.time()%0A%20%20%20%20np.sum(tabb)%0A%20%20%20%20end_np%20%3D%20time.time()%0A%20%20%20%20print(%22Temps%20calcul%20%3D%20%22%2C%20end_np-start_np)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Remarque%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20On%20peut%20%C3%A9galement%20effectuer%20des%20sommes%20colonne%20par%20colonne%20ou%20ligne%20par%20ligne.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(rd)%3A%0A%20%20%20%20tab%20%3D%20rd.randint(0%2C100%2C(3%2C3))%0A%20%20%20%20print(tab)%0A%20%20%20%20print(tab.sum(axis%3D0))%20%23%20somme%20colonne%20par%20colonne%0A%20%20%20%20print(tab.sum(axis%3D1))%20%23%20somme%20ligne%20par%20ligne%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20d)%20Statistiques%0A%0A%20%20%20%20Il%20%C3%A9galement%20possible%20de%20calculer%20les%20statistiques%20de%20tableaux%20%60numpy%60%2C%20via%20les%20fonctions%20suivantes%3A%0A%0A%20%20%20%20%7C%20%60numpy%60%20%7C%20**Statistique**%20%7C%0A%20%20%20%20%7C%3A--%3A%7C%3A--%3A%7C%0A%20%20%20%20%7C%60mean()%60%20%7C%20moyenne%20%7C%0A%20%20%20%20%7C%60var()%60%7C%20variance%20%7C%0A%20%20%20%20%7C%60percentile()%60%7C%20quantiles%20%7C%0A%0A%20%20%20%20La%20doc%20pour%20la%20liste%20compl%C3%A8te%20des%20fonctions%20pour%20les%20statistiques%20est%20disponible%20sur%20le%20site%20officiel%20de%20%60numpy%60%3A%0A%20%20%20%20https%3A%2F%2Fnumpy.org%2Fdoc%2Fstable%2Freference%2Froutines.statistics.html%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20rd)%3A%0A%20%20%20%20tabl%20%3D%20rd.rand(10000)%0A%20%20%20%20print(np.mean(tabl))%0A%20%20%20%20print(np.var(tabl))%0A%20%20%20%20print(np.percentile(tabl%2C%203))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20e)%20Op%C3%A9rations%20logiques%0A%0A%20%20%20%20On%20peut%20aussi%20faire%20des%20tests%20sur%20les%20tableaux%20%60numpy%60%2C%20par%20exemple%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20X%20%3D%20np.arange(20)%0A%20%20%20%20print(X)%0A%20%20%20%20%23%20Y-a-t-il%20des%20%C3%A9l%C3%A9ments%20de%20X%20%3E%2025%20%3F%0A%20%20%20%20print(np.any(X%3E25))%0A%20%20%20%20%23%20Tous%20les%20%C3%A9l%C3%A9ments%20de%20X%20sont-ils%20%3C%2025%20%3F%0A%20%20%20%20print(np.all(X%3C25))%0A%20%20%20%20%23%20Quels%20sont%20les%20%C3%A9l%C3%A9ments%20de%20X%20%3E%2015%20%3F%0A%20%20%20%20print(np.where(X%3E15))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20f)%20Gestion%20des%20tailles%0A%0A%20%20%20%20On%20peut%20redimensionner%20un%20tableau%20avec%20la%20fonction%20%60numpy.reshape()%60%2C%20mais%20attention%2C%20le%20tableau%20redimensionn%C3%A9%20est%20simplement%20une%20vue%20sur%20le%20tableau%0A%20%20%20%20initial.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20A%20%3D%20np.arange(9)%0A%20%20%20%20print(A)%0A%20%20%20%20B%20%3D%20A.reshape(3%2C3)%0A%20%20%20%20print(B)%20%23%20c'est%20maintenant%20une%20matrice%203x3%20!%0A%20%20%20%20B%5B1%2C1%5D%20%3D%20100%0A%20%20%20%20print(A)%0A%20%20%20%20print(B)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20aussi%20empiler%20verticalement%20ou%20horizontalement%20des%20tableaux.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20L1%20%3D%20np.array(%5B1%2C%202%2C%203%5D)%0A%20%20%20%20L2%20%3D%20np.array(%5B4%2C%205%2C%206%5D)%0A%20%20%20%20L3%20%3D%20np.array(%5B7%2C%208%2C%209%5D)%0A%20%20%20%20A1%20%3D%20np.vstack((L1%2CL2%2CL3))%20%23%20stack%20vertical%20%3D%3D%3E%20L1%20L2%20et%20L3%20en%20lignes%0A%20%20%20%20print(A1)%0A%20%20%20%20I%20%3D%20np.eye(3%2C3)%0A%20%20%20%20B1%20%3D%20np.hstack((A1%2CI))%20%23%20stack%20horizontal%20%3D%3D%3E%20on%20a%20rajout%C3%A9%20I%20%C3%A0%20droite%0A%20%20%20%20print(B1)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Gestion%20des%20tailles%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20Dans%20beaucoup%20de%20situations%2C%20les%20%C3%A9l%C3%A9ments%20d%E2%80%99un%20tableau%20sont%20inconnus%2C%20mais%20la%20taille%20du%20tableau%20est%20connue.%20Afin%20d%E2%80%99%C3%A9viter%20d%E2%80%99augmenter%20la%20taille%20du%20tableau%20progressivement%2C%20qui%20co%C3%BBte%20cher%2C%20on%20peut%20utiliser%20les%20fonctions%20%60np.zeros()%60%20ou%20%60np.ones()%60%20pour%20cr%C3%A9er%20des%20tableaux%20de%20tailles%20ad%C3%A9quates%20avec%20des%20%C3%A9l%C3%A9ments%20(0%20ou%201%20respectivement)%20qui%20seront%20temporaires.%0A%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%204.6.%20Alg%C3%A8bre%20lin%C3%A9aire%0A%0A%20%20%20%20On%20pr%C3%A9sente%20pour%20terminer%20quelques%20fonctionnalit%C3%A9s%20de%20bases%20en%20alg%C3%A8bre%20lin%C3%A9aire%2C%20%C3%A0%20l'aide%20du%20sous-module%20%60linalg%60%20de%20%60numpy%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy.linalg%20as%20la%20%23%20on%20importe%20le%20module%20linalg%20du%20module%20numpy%20de%20la%20m%C3%AAme%20fa%C3%A7on%2C%20la%20est%20l'alias%20g%C3%A9n%C3%A9rique%0A%0A%20%20%20%20return%20(la%2C)%0A%0A%0A%40app.cell%0Adef%20_(la)%3A%0A%20%20%20%20v_3%20%3D%20%5B3%20*%20i%20**%202%20*%20(-1)%20**%20i%20for%20i%20in%20range(1%2C%205)%5D%0A%20%20%20%20la.norm(v_3)%20%20%23%20norme%20d'un%20vecteur%0A%20%20%20%20return%20(v_3%2C)%0A%0A%0A%40app.cell%0Adef%20_(la%2C%20np%2C%20v_3)%3A%0A%20%20%20%20np.dot(v_3%2C%20v_3)%20-%20la.norm(v_3)%20**%202%20%20%23%20presque%200%2C%20ouf%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20M%20%3D%20np.array(%5B%5Bnp.sin(i*j)%20for%20j%20in%20range(1%2C5)%5D%20for%20i%20in%20range(1%2C5)%5D)%3B%20print(M)%0A%20%20%20%20return%20(M%2C)%0A%0A%0A%40app.cell%0Adef%20_(M%2C%20la)%3A%0A%20%20%20%20la.det(M)%20%23%20d%C3%A9terminant%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(M%2C%20la)%3A%0A%20%20%20%20la.inv(M)%20%23%20inverse%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(M%2C%20la%2C%20np)%3A%0A%20%20%20%20np.dot(M%2C%20la.inv(M))%20%23%20presque%20l'identit%C3%A9%2C%20ouf%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(M%2C%20la)%3A%0A%20%20%20%20la.norm(M)%20%23%20norme%20matricielle%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(M%2C%20np)%3A%0A%20%20%20%20np.sqrt(np.trace(np.dot(M.transpose()%2CM)))%20%23%20v%C3%A9rification%20que%20la%20norme%20matricielle%20est%20bien%20la%20norme%20de%20Frobenius%20sqrt(tr(M%5ETM))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Il%20y%20a%20m%C3%AAme%20de%20quoi%20r%C3%A9soudre%20des%20syst%C3%A8mes%20lin%C3%A9aires%20!%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(M%2C%20la%2C%20np%2C%20v_3)%3A%0A%20%20%20%20x_16%20%3D%20la.solve(M%2C%20v_3)%0A%20%20%20%20print(x_16)%20%20%23%20x%20est%20solution%20de%20Mx%20%3D%20v%0A%20%20%20%20print(la.norm(np.dot(M%2C%20x_16)%20-%20v_3))%20%20%23%20on%20a%20bien%20le%20zero%20numerique%2C%20ouf%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Quelques%20fonctions%20usuelles%20pour%20l'alg%C3%A8bre%20lin%C3%A9aire%3A%0A%0A%20%20%20%20%7C%60linalg%60%7C**Fonction%20math%C3%A9matique**%7C%0A%20%20%20%20%7C%3A------%3A%7C%3A-----------------------%3A%7C%0A%20%20%20%20%7C%60matrix_power(A%2Cn)%60%7Cla%20matrice%20%24A%5En%24%7C%0A%20%20%20%20%7C%60det(A)%60%7Cd%C3%A9terminant%20de%20%24A%24%7C%0A%20%20%20%20%7C%60inv(A)%60%7Cmatrice%20inverse%20de%20%24A%24%7C%0A%20%20%20%20%7C%60solve(A%2Cb)%60%7Cretourne%20la%20solution%20de%20%24Ax%20%3D%20b%24%7C%0A%20%20%20%20%7C%60eig(A)%60%7Cles%20valeurs%20et%20vecteurs%20propres%20de%20%24A%24%7C%0A%20%20%20%20%7C%60eigvals(A)%60%7Cles%20valeurs%20propres%20de%20%24A%24%7C%0A%20%20%20%20%7C%60norm(A)%60%7Cnorme%202%20de%20%24A%24%7C%0A%20%20%20%20%7C%60trace(A)%60%7Ctrace%20de%20%24A%24%7C%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%205.%20La%20biblioth%C3%A8que%20%60scipy%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%60scipy%60%20est%20une%20biblioth%C3%A8que%20Python%20pour%20le%20calcul%20scientifique%20avanc%C3%A9.%20Il%20contient%20des%20algorithmes%20tels%20que%20les%20m%C3%A9thodes%20directes%20ou%20it%C3%A9ratives%20de%20r%C3%A9solution%20de%20syst%C3%A8mes%20lin%C3%A9aires%2C%20les%20m%C3%A9thodes%20d%E2%80%99int%C3%A9grations%20num%C3%A9riques%2C%0A%20%20%20%20d%E2%80%99optimisation%2C%20de%20recherche%20de%20racines%20de%20fonctions%2C%20de%20fft%2C%20...%0A%20%20%20%20%60scipy%60%20peut%20%C3%AAtre%20vu%20comme%20une%20extension%20de%20%60numpy%60%20car%20il%20contient%0A%20%20%20%20toutes%20les%20fonctions%20de%20%60numpy%60.%0A%0A%20%20%20%20Les%20diff%C3%A9rentes%20fonctionnalit%C3%A9s%20de%20calcul%20scientifique%20disponibles%20dans%20%60scipy%60%20sont%20r%C3%A9partis%20en%20sous-modules%2C%20comme%20pour%20%60numpy%60%3A%0A%0A%20%20%20%20%7C%20module%20%7C%20contenu%20%7C%0A%20%20%20%20%7C%3A-%3A%7C%3A-%3A%7C%0A%20%20%20%20%7C%60constants%60%7Cles%20constantes%20physiques%20et%20math%C3%A9matiques%7C%0A%20%20%20%20%7C%60integrate%60%7Cint%C3%A9gration%20et%20%C3%A9quations%20diff%C3%A9rentielles%7C%0A%20%20%20%20%7C%60interpolate%60%7Cinterpolation%7C%0A%20%20%20%20%7C%60linalg%60%7Calg%C3%A8bre%20lin%C3%A9aire%7C%0A%20%20%20%20%7C%60signal%60%7Ctraitement%20du%20signal%7C%0A%20%20%20%20%7C%60fftpack%60%7Ctransform%C3%A9e%20de%20Fourier%20rapide%7C%0A%20%20%20%20%7C%60sparse%60%7Cmatrices%20creuses%20et%20manipulations%7C%0A%20%20%20%20%7C%60io%60%7Centr%C3%A9es%20et%20sorties%20(inputs%20et%20outputs)%7C%0A%0A%20%20%20%20On%20donne%20ci-dessous%20quelques%20exemples%20d'utilisation%20de%20%60scipy%60%2C%20et%20on%20renvoie%20%C3%A0%20la%20documentation%20pour%20plus%20de%20d%C3%A9tails%3A%0A%20%20%20%20https%3A%2F%2Fdocs.scipy.org%2Fdoc%2Fscipy%2Ftutorial%2Findex.html%23user-guide%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%205.1.%20Syst%C3%A8mes%20lin%C3%A9aires%0A%0A%20%20%20%20De%20fa%C3%A7on%20g%C3%A9n%C3%A9rale%2C%20on%20peut%20utiliser%20la%20fonction%20%60solve%60%20de%20%60scipy.linalg%60%20pour%20r%C3%A9soudre%20des%20syst%C3%A8mes%20lin%C3%A9aires%20(noter%20que%20c'est%20%C3%A9galement%20possible%20avec%20%60scipy.linalg.solve()%60).%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20scipy.linalg%20as%20spl%0A%0A%20%20%20%20return%20(spl%2C)%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20spl)%3A%0A%20%20%20%20matA%20%3D%20np.array(%5B%5B1%2C-2%2C3%2C-7%2C6%5D%2C%20%5B5%2C3%2C-1%2C-1%2C7%5D%2C%20%5B2%2C4%2C11%2C-6%2C10%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B-1%2C-1%2C-2%2C3%2C3%5D%2C%20%5B1%2C2%2C1%2C1%2C-5%5D%5D)%0A%20%20%20%20vecb%20%3D%20np.array(%5B21%2C58%2C43%2C45%2C-44%5D)%0A%20%20%20%20xx%20%3D%20spl.solve(matA%2Cvecb)%0A%20%20%20%20print(%22A%20%3D%22%2C%20matA)%0A%20%20%20%20print(%22b%20%3D%22%2C%20vecb)%0A%20%20%20%20print(%22x%20%3D%22%2C%20xx%2C%20%22et%20solution%20de%20Ax%20%3D%20b%20!%22)%0A%20%20%20%20print(%22En%20effet%2C%20norm(Ax-b)%20%3D%22%2C%20spl.norm(matA%40xx%20-%20vecb))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Quand%20les%20matrices%20sont%20de%20tailles%20plus%20importantes%20mais%20ont%20le%20bon%20go%C3%BBt%20d'%C3%AAtre%20par%20exemple%20creuses%20(c'est-%C3%A0-dire%20qu'elles%20contiennent%20beaucoup%20de%200)%2C%20on%20peut%20utiliser%20les%20structures%20associ%C3%A9es%20dans%20%60scipy%60.%20Pour%20le%20cas%20des%20matrices%20creuses%20(qui%2C%20vous%20le%20verez%20plus%20tard%2C%20apparaissent%20dans%20nombre%20d'applications)%2C%20cela%20se%20fait%20%C3%A0%20l'aide%20du%20module%20%60sparse%60.%0A%0A%20%20%20%20On%20montre%20ci-dessous%20un%20tel%20exemple%2C%20avec%20une%20matrice%20tri-diagonale.%20Il%20n'est%20pas%20attendu%20que%20vous%20le%20reteniez%20par%20coeur%2C%20mais%20c'est%20pour%20vous%20donner%20une%20id%C3%A9e%20de%20la%20puissance%20de%20%60numpy%60%20et%20%60scipy%60%20(et%20de%20Python%20en%20g%C3%A9n%C3%A9ral%20pour%20faire%20des%20maths%20!).%0A%0A%20%20%20%20On%20cherche%20%C3%A0%20r%C3%A9soudre%20%24A_n%20x_n%20%3D%20b_n%24%20o%C3%B9%20%24n%24%20est%20un%20entier%20naturel%20et%20%24A_n%24%20est%20une%20matrice%20tridiagonale%20telle%20que%0A%20%20%20%20%5C%5B%20A_n%20%3D%20%5Cbegin%7Bpmatrix%7D%0A%20%20%20%204%20%26%202%20%26%200%20%26%20%20%26%20%5Cdots%20%26%20%26%200%20%5C%5C%0A%20%20%20%202%20%26%204%20%26%202%20%26%200%20%20%20%20%20%26%20%20%26%20%26%20%5Cvdots%20%5C%5C%0A%20%20%20%200%20%26%202%20%26%204%20%26%202%20%20%20%20%20%26%200%20%26%20%26%20%5Cvdots%20%5C%5C%0A%20%20%20%20%5Cvdots%20%26%5Cddots%20%20%26%20%5Cddots%20%26%20%5Cddots%20%26%20%5Cddots%20%26%20%5Cddots%20%20%26%20%5Cvdots%20%5C%5C%0A%20%20%20%20%5Cvdots%20%26%20%26%200%20%26%202%20%26%204%20%26%202%20%26%200%20%5C%5C%0A%20%20%20%20%5Cvdots%20%26%20%26%20%26%200%20%26%202%20%26%204%20%26%202%20%20%5C%5C%0A%20%20%20%200%20%26%20%20%26%20%5Cdots%20%26%20%20%26%200%20%26%202%20%26%204%20%20%5C%5C%0A%20%20%20%20%5Cend%7Bpmatrix%7D%0A%20%20%20%20%5C%5D%0A%20%20%20%20et%0A%20%20%20%20%5C%5B%20b_n%20%3D%20%5Cbegin%7Bpmatrix%7D%201%20%5C%5C%20%5Cvdots%20%5C%5C%201%20%5Cend%7Bpmatrix%7D%20%5C%5D%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20spl)%3A%0A%20%20%20%20import%20scipy.sparse%20as%20spsp%0A%20%20%20%20import%20scipy.sparse.linalg%20as%20spspl%0A%0A%20%20%20%20N%20%3D%2050%0A%20%20%20%20diagonale%20%3D%20np.zeros(N)%0A%20%20%20%20s_diagonale%20%3D%20np.zeros(N-1)%0A%20%20%20%20diagonale%5B%3A%5D%20%3D%204%0A%20%20%20%20s_diagonale%5B%3A%5D%20%3D%202%0A%20%20%20%20An%20%3D%20spsp.diags(diagonals%3D%5Bdiagonale%2C%20s_diagonale%2C%20s_diagonale%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20offsets%3D%5B0%2C%20-1%2C%201%5D%2C%20shape%3D(N%2CN)%2C%20format%3D'csr')%0A%20%20%20%20bn%20%3D%20np.ones(N)%0A%20%20%20%20x%20%3D%20spspl.spsolve(An%2Cbn)%0A%20%20%20%20print(%22x%20%3D%22%2C%20x)%0A%20%20%20%20print(%22norm(Ax%20-%20b)%20%3D%22%2C%20spl.norm(An%40x%20-%20bn))%0A%20%20%20%20return%20(An%2C)%0A%0A%0A%40app.cell%0Adef%20_(An)%3A%0A%20%20%20%20print(%22A%20%3D%22%2C%20An)%20%23%20uniquement%20les%20%C3%A9l%C3%A9ments%20non-nuls%20de%20A%20sont%20affich%C3%A9s%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%205.2.%20%C3%89quations%20non-lin%C3%A9aires%0A%0A%20%20%20%20Le%20sous-module%20%60optimize%60%20permet%20de%20r%C3%A9soudre%20des%20%C3%A9quations%20et%20syst%C3%A8mes%20non-lin%C3%A9aires.%20Ci-dessous%2C%20on%20r%C3%A9souds%20l'%C3%A9quation%0A%20%20%20%20%5C%5B%20%5Cexp(-x)%20%3D%20%5Csin(x)%20%5C%5D%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20scipy.optimize%20as%20optim%0A%0A%20%20%20%20return%20(optim%2C)%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20optim)%3A%0A%20%20%20%20f%20%3D%20lambda%20x%20%3A%20np.exp(-x)-np.sin(x)%20%23%20noter%20la%20fonction%20anonynme%20!%0A%20%20%20%20x0%20%3D%207%20%23%20point%20de%20d%C3%A9part%20de%20l'algorithme%20utilis%C3%A9%20(cf.%20m%C3%A9thodes%20num%20en%20S2)%0A%20%20%20%20sol%20%3D%20optim.fsolve(f%2C%20x0)%20%23%20r%C3%A9soud%20f(x)%20%3D%200%2C%20en%20partant%20de%20x0%0A%20%20%20%20print(%22x%20%3D%22%2C%20sol)%0A%20%20%20%20print(%22f(x)%20%3D%22%2C%20f(sol))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Et%20cela%20marche%20aussi%20pour%20les%20syst%C3%A8mes...%20On%20r%C3%A9soud%20ici%20le%20syst%C3%A8me%0A%20%20%20%20%5C%5B%0A%20%20%20%20%5Cbegin%7Bcases%7D%0A%20%20%20%20%5Cexp(x)%20%2B%20xy%5E2%20%3D%201%20%5C%5C%20%5Csin(x%2By)%20%2B%20x%5E2%20%3D%201%0A%20%20%20%20%5Cend%7Bcases%7D%0A%20%20%20%20%5C%5D%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20optim)%3A%0A%20%20%20%20def%20g(z)%3A%0A%20%20%20%20%20%20%20%20x%2C%20y%20%3D%20z%5B0%5D%2C%20z%5B1%5D%0A%20%20%20%20%20%20%20%20q%20%3D%20%5Bnp.exp(x)%2Bx*y*y-1%2C%20np.sin(x%2By)%2Bx*x-1%5D%0A%20%20%20%20%20%20%20%20return%20q%0A%0A%20%20%20%20%23%20Attention%2C%20le%20point%20de%20d%C3%A9part%20doit%20avoir%20la%20bonne%20dimension%0A%20%20%20%20s%20%3D%20optim.fsolve(g%2Cnp.array(%5B0%2C0%5D))%0A%0A%20%20%20%20%23%20solution%3A%20x%3D0%20et%20y%3Dpi%2F2%0A%20%20%20%20print(%22x%20%3D%22%2C%20s)%0A%20%20%20%20print(%22f(x)%20%3D%22%2C%20g(s))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Les%20algorithmes%20derri%C3%A8res%20ne%20sont%20pas%20magiques%2C%20ils%20sont%20bas%C3%A9s%20sur%20des%20fondements%20math%C3%A9matiques%20solides.%20Vous%20en%20verez%20certaines%20au%20second%20semestre%2C%20dans%20le%20cours%20de%20m%C3%A9thodes%20num%C3%A9riques.%20Certains%20de%20ces%20algorithmes%20sont%20%C3%A9galements%20au%20programme%20de%20l'option%20B%20-%20Mod%C3%A9lisation%20-%20de%20l'agr%C3%A9gation%20externe%20de%20math%C3%A9matiques%2C%20seule%20option%20enseign%C3%A9e%20%C3%A0%20l'UPJV.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%205.3.%20Int%C3%A9gration%20num%C3%A9rique%0A%0A%20%20%20%20Le%20module%20%60integrate%60%20de%20%60scipy%60%20permet%20de%20calculer%20des%20int%C3%A9grales.%20Ci-dessous%2C%20on%20calcule%0A%20%20%20%20%5C%5B%20%5Cint_0%5E3%20x%5E2%20%5Ctext%7Bd%7Dx.%20%5C%5D%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20scipy.integrate%20as%20si%0A%0A%20%20%20%20ff%20%3D%20lambda%20x%20%3A%20x**2%0A%20%20%20%20%23%20le%20premier%20argument%20renvoy%C3%A9%20est%20une%20approximation%20num%C3%A9rique%20de%20l'int%C3%A9grale%2C%20le%20second%20une%20estimation%20de%20l'erreur%20entre%20l'int%C3%A9grale%20exacte%20et%20cette%20approximation%0A%20%20%20%20print(%22L'int%C3%A9grale%20de%20f%20sur%20%5B0%2C3%5D%20vaut%22%2C%20si.quad(ff%2C0%2C3))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%206.%20La%20biblioth%C3%A8que%20%60matplotlib%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20conclut%20ce%20chapitre%20en%20discutant%20de%20comment%20afficher%20des%20graphes%20avec%20Python.%20Cela%20permet%20de%20tracer%20des%20fonctions%2C%20mais%20aussi%20des%20courbes%20de%20convergence%20d'algorithme%2C%20etc...%20Il%20faut%20commencer%20par%20charger%20le%20module%20%60pyplot%60%20de%20la%20biblioth%C3%A8que%20%60matplotlib%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%20%23%20plt%20est%20l'alias%20utilis%C3%A9%20en%20g%C3%A9n%C3%A9ral%0A%0A%20%20%20%20return%20(plt%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%60matlotlib%60%20est%20une%20biblioth%C3%A8que%20tr%C3%A8s%20puissante%20pour%20tout%20ce%20qui%20touche%20%C3%A0%20l'affichage%20de%20donn%C3%A9es%2C%20de%20fonctions%2C%20etc...%20Pour%20plus%20d'informations%2C%20on%20renvoie%20comme%20toujours%20%C3%A0%20la%20documentation%3A%20https%3A%2F%2Fmatplotlib.org%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%206.1.%20Graphiques%20en%201D%0A%0A%20%20%20%20On%20va%20commencer%20par%20un%20plot%20en%201D.%20Il%20faut%20pour%20%C3%A7a%20toute%20une%20suite%20de%20commande%2C%20qui%20termine%20par%20la%20fonction%20%60savefig()%60%20pour%20sauvegarder%20la%20figure%20et%20%60show()%60%20pour%20la%20montrer%20en%20direct.%20Dans%20les%20cellules%20ci-dessous%20vous%20trouverez%20diff%C3%A9rentes%20fa%C3%A7ons%20d'utiliser%20la%20librairie%20%60pyplot%60.%0A%0A%20%20%20%20%23%23%23%23%20a)%20Plot%20standard%0A%0A%20%20%20%20On%20commence%20par%20g%C3%A9n%C3%A9rer%20des%20donn%C3%A9es%20%C3%A0%20afficher.%20Typiquement%2C%20un%20axe%20des%20abcsisses%20discr%C3%A9tis%C3%A9%20(%60x1%60)%20et%20les%20ordonn%C3%A9es%20quand%20on%20applique%20une%20fonction%20(%60y1%60).%20Cela%20correspond%20en%20fait%20%C3%A0%20un%20ensemble%20_finis_%20de%20points%20%24(x%2Cy)%24%20qui%20vont%20%C3%AAtres%20affich%C3%A9s%20dans%20le%20plan.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20x1%20%3D%20np.linspace(0.0%2C%203.0%2C%20101)%0A%20%20%20%20y1%20%3D%20np.cos(2%20*%20np.pi%20*%20x1)%20*%20np.exp(-x1)%0A%20%20%20%20return%20x1%2C%20y1%0A%0A%0A%40app.cell%0Adef%20_(plt%2C%20x1%2C%20y1)%3A%0A%20%20%20%20plt.plot(x1%2C%20y1)%0A%20%20%20%20plt.title('A%20tale%20of%20plots')%0A%20%20%20%20plt.ylabel('Damped%20oscillation')%0A%20%20%20%20plt.savefig(%22mon_premier_plot.png%22)%20%23%20a%20%C3%A9t%C3%A9%20sauvegard%C3%A9%20dans%20le%20r%C3%A9pertoire%20courant%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Pour%20avoir%20deux%20courbes%20sur%20un%20m%C3%AAme%20plot%2C%20on%20encha%C3%AEne%20les%20plots%20!%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20plt%2C%20x1%2C%20y1)%3A%0A%20%20%20%20y2%20%3D%20np.cos(2%20*%20np.pi%20*%20x1)%0A%0A%20%20%20%20plt.plot(x1%2C%20y1)%0A%20%20%20%20plt.plot(x1%2C%20y2)%0A%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20(y2%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Il%20devient%20alors%20imp%C3%A9ratif%20d'ajouter%20une%20l%C3%A9gende%2C%20histoire%20d'identifier%20les%20courbes...%20Cela%20se%20fait%20%C3%A0%20l'aide%20de%20la%20fonction%20%60plt.legend(...)%60.%20On%20peut%20pr%C3%A9ciser%20la%20localisation%20avec%20%60loc%3D%22upper%20left%22%60%20par%20exemple.%20Par%20d%C3%A9faut%2C%20%60pyplot%60%20trouvera%20la%20meilleure%20localisation%20possible.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(plt%2C%20x1%2C%20y1%2C%20y2)%3A%0A%20%20%20%20plt.plot(x1%2C%20y1%2C'r%2B-'%2C%20label%3D%22Damped%20oscillations%22)%0A%20%20%20%20plt.plot(x1%2C%20y2%2C'b-'%2C%20label%3D%22Non%20damped%22)%0A%20%20%20%20plt.legend(loc%3D%22upper%20left%22)%0A%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Vous%20aurez%20remarqu%C3%A9%20le%20charabia%20du%20style%20%60'r%2B-'%60%20qui%20donne%20une%20courbe%20rouge%2C%20avec%20des%20hexagones%20sur%20les%20points%20et%20en%20pointill%C3%A9s...%20Il%20s'agit%20en%20effet%20de%20l'argument%20de%20la%20fonction%20%60plot(...)%60%20qui%20va%20modifier%20le%20style%20de%20votre%20courbe.%20Sa%20syntaxe%20est%20de%20la%20forme%20%60'%5Bcolor%5D%5Bmarker%5D%5Bline%5D'%60%20(ici%2C%20%60r%60%20pour%20red%2C%20%60%2B%60%20pour%20des%20%60%2B%60%20et%20%60-%60%20pour%20une%20ligne%20continue).%20Si%20aucun%20style%20de%20marquers%20n'est%20pr%C3%A9cis%C3%A9%2C%20alors%20seule%20la%20courbe%20sera%20affich%C3%A9e%20par%20exemple.%0A%0A%20%20%20%20Pour%20plus%20d'infos%20sur%20le%20style%20des%20courbes%2C%20rdv%20sur%20https%3A%2F%2Fmatplotlib.org%2Fstable%2Fapi%2F_as_gen%2Fmatplotlib.pyplot.plot.html%0A%0A%20%20%20%20On%20peut%20aussi%20mettre%20plusieurs%20graphes%20sur%20une%20m%C3%AAme%20figure.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20plt)%3A%0A%20%20%20%20xa%20%3D%20np.linspace(-3%2C3%2C100)%0A%20%20%20%20ya%20%3D%20np.exp(-xa*xa)%0A%20%20%20%20yb%20%3D%20xa**2%2F9%0A%20%20%20%20fig%2C%20(ax1%2C%20ax2)%20%3D%20plt.subplots(1%2C%202%2C%20sharey%3DTrue)%0A%20%20%20%20ax1.plot(xa%2C%20ya)%0A%20%20%20%20ax1.set_title(r'La%20fonction%20%24f(x)%3D%5Cexp(-x%5E2)%24'%2C%20fontsize%3D8)%0A%20%20%20%20ax2.plot(xa%2C%20yb)%0A%20%20%20%20ax2.set_title(r'La%20fonction%20%24g(x)%3D%5Cfrac%7B-x%5E2%7D%7B9%7D%24'%2C%20fontsize%3D8)%0A%20%20%20%20fig.suptitle('Titre%20pour%20toute%20la%20fig'%2C%20fontsize%3D10)%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20%24%5CLaTeX%24%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20Pour%20ins%C3%A9rer%20des%20notations%20math%C3%A9matiques%20dans%20les%20l%C3%A9gendes%2C%20on%20peut%20cr%C3%A9er%20des%20cha%C3%AEnes%20de%20caract%C3%A8res%20sp%C3%A9ciales%20qui%20acceptent%20les%20commandes%20%24%5CLaTeX%24.%20Cela%20se%20fait%20avec%20la%20syntaxe%20suivante%20(noter%20le%20%60r%60%20avant%20les%20guillemets!)%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20plot(...%2C%20label%3Dr'str%20avec%20des%20commandes%20latex')%0A%20%20%20%20%60%60%60%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20b)%20Logplots%0A%0A%20%20%20%20Il%20peut%20%C3%AAtre%20important%20pour%20les%20graphes%20de%20convergence%20de%20changer%20les%20%C3%A9chelles%20des%20axes%20%24x%24%20et%2Fou%20%24y%24.%20On%20compare%20ci-dessous%20diff%C3%A9rentes%20fa%C3%A7ons%20d'afficher%20%24%5Cdelta%20x%24%20et%20%24%5Cdelta%20x%5E2%24%20quand%20%24%5Cdelta%20x%20%5Cto%200%24.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20deltaX%20%3D%20np.array(%5B10**i%20for%20i%20in%20range(-10%2C0)%5D)%0A%20%20%20%20errO1%20%3D%20deltaX%0A%20%20%20%20errO2%20%3D%20deltaX**2%0A%20%20%20%20return%20deltaX%2C%20errO1%2C%20errO2%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Tentative%20de%20plot%20en%20%C3%A9chelle%20standard%20%3A%20on%20y%20voit%20pas%20grand%20chose...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(deltaX%2C%20errO1%2C%20errO2%2C%20plt)%3A%0A%20%20%20%20plt.plot(deltaX%2CerrO1%2C'%2B-'%2Clabel%3D%22Ordre%201%22)%0A%20%20%20%20plt.plot(deltaX%2CerrO2%2C'*-.'%2Clabel%3D%22Ordre%202%22)%0A%20%20%20%20plt.xlabel('%24%5CDelta%20x%24')%0A%20%20%20%20plt.ylabel('Err')%0A%20%20%20%20plt.title('Normal%3A%20pas%20%C3%A9chelle%20log')%0A%20%20%20%20plt.legend()%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Avec%20juste%20les%20abscisses%20en%20log%20c'est%20pas%20mieux...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(deltaX%2C%20errO1%2C%20errO2%2C%20plt)%3A%0A%20%20%20%20plt.semilogx(deltaX%2CerrO1%2C'%2B-'%2Clabel%3D%22Ordre%201%22)%0A%20%20%20%20plt.semilogx(deltaX%2CerrO2%2C'*-.'%2Clabel%3D%22Ordre%202%22)%0A%20%20%20%20plt.xlabel('%24%5CDelta%20x%24')%0A%20%20%20%20plt.ylabel('Err')%0A%20%20%20%20plt.title('Seulement%20les%20abscisses%20en%20%C3%A9chelle%20log')%0A%20%20%20%20plt.legend()%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Pareil%20avec%20les%20ordonn%C3%A9es...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(deltaX%2C%20errO1%2C%20errO2%2C%20plt)%3A%0A%20%20%20%20plt.semilogy(deltaX%2CerrO1%2C'%2B-'%2Clabel%3D%22Ordre%201%22)%0A%20%20%20%20plt.semilogy(deltaX%2CerrO2%2C'*-.'%2Clabel%3D%22Ordre%202%22)%0A%20%20%20%20plt.xlabel('%24%5CDelta%20x%24')%0A%20%20%20%20plt.ylabel('Err')%0A%20%20%20%20plt.title('Seulement%20les%20ordonn%C3%A9es%20en%20%C3%A9chelle%20log')%0A%20%20%20%20plt.legend()%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Les%20mieux%20c'est%20en%20loglog%20dans%20ce%20cas%20!%20Tout%20d%C3%A9pend%20de%20la%20situation%2C%20%C3%A0%20vous%20de%20choisir%20ce%20qui%20convient%20le%20mieux...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(deltaX%2C%20errO1%2C%20errO2%2C%20plt)%3A%0A%20%20%20%20plt.loglog(deltaX%2CerrO1%2C'%2B-'%2Clabel%3D%22Ordre%201%22)%0A%20%20%20%20plt.loglog(deltaX%2CerrO2%2C'*-.'%2Clabel%3D%22Ordre%202%22)%0A%20%20%20%20plt.xlabel('%24%5CDelta%20x%24')%0A%20%20%20%20plt.ylabel('Err')%0A%20%20%20%20plt.title('Ordonn%C3%A9es%20et%20abscisses%20en%20%C3%A9chelle%20log')%0A%20%20%20%20plt.legend()%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20c)%20Nuage%20de%20points%0A%0A%20%20%20%20Pour%20repr%C3%A9senter%20des%20donn%C3%A9es%2C%20il%20peut%20%C3%AAtre%20utile%20d'avoir%20recourt%20%C3%A0%20des%20nuages%20de%20points%20%C3%A0%20l'aide%20de%20la%20fonction%20%60scatter()%60%2C%20qui%20ne%20relie%20pas%20les%20points%20entre%20eux.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20plt)%3A%0A%20%20%20%20x_17%20%3D%20np.random.rand(50)%0A%20%20%20%20y_7%20%3D%20np.random.rand(50)%0A%20%20%20%20plt.scatter(x_17%2C%20y_7%2C%20marker%3D'%2B'%2C%20color%3D'k')%20%20%23%20%2B%20pour%20des%20croix%2C%20k%20pour%20black%0A%20%20%20%20plt.title('Corr%C3%A9lation%20entre%20camembert%20et%20morbier')%0A%20%20%20%20plt.xlabel('kg%20de%20camembert%20consomm%C3%A9s%20par%20an')%0A%20%20%20%20plt.ylabel('kg%20de%20morbier%20consomm%C3%A9s%20par%20an')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%206.2.%20Graphiques%20en%202D%0A%0A%20%20%20%20Il%20faut%20commencer%20par%20g%C3%A9n%C3%A9rer%20des%20donn%C3%A9es%202D.%20C'est%20un%20processus%20souvent%20p%C3%A9nible%2C%20voici%20une%20fa%C3%A7on%20de%20proc%C3%A9der%3A%20on%20g%C3%A9n%C3%A8re%20deux%20%22maillages%22%20(un%20en%20%24x%24%20et%20un%20en%20%24y%24)%2C%20puis%20on%20les%20combine%20via%20la%20fonction%20%60meshgrid%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20delta%20%3D%200.025%0A%20%20%20%20x_18%20%3D%20np.arange(-3.0%2C%203.0%2C%20delta)%0A%20%20%20%20y_8%20%3D%20np.arange(-2.0%2C%202.0%2C%20delta)%0A%20%20%20%20X1%2C%20Y1%20%3D%20np.meshgrid(x_18%2C%20y_8)%20%20%23%20noter%20cette%20utilisation%0A%20%20%20%20Z1%20%3D%20np.exp(-X1%20**%202%20-%20Y1%20**%202)%0A%20%20%20%20Z2%20%3D%20np.exp(-(X1%20-%201)%20**%202%20-%20(Y1%20-%201)%20**%202)%0A%20%20%20%20Z%20%3D%202%20*%20(Z1%20-%20Z2)%0A%20%20%20%20return%20X1%2C%20Y1%2C%20Z%0A%0A%0A%40app.cell%0Adef%20_(X1%2C%20Y1%2C%20Z%2C%20plt)%3A%0A%20%20%20%20%23%20On%20plot%20une%20%22heatmap%22%2C%20avec%20la%20colorbar%20associ%C3%A9e%0A%20%20%20%20nct%20%3D%20100%20%23%20nombre%20de%20niveaux%20--%3E%20jouer%20avec%20pour%20voir%20ce%20qui%20change%0A%20%20%20%20plt.figure()%0A%20%20%20%20plt.contourf(X1%2C%20Y1%2C%20Z%2C%20nct)%0A%20%20%20%20plt.colorbar()%0A%20%20%20%20plt.title(%22rempli%22)%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X1%2C%20Y1%2C%20Z%2C%20plt)%3A%0A%20%20%20%20%23%20Ou%20bien%20juste%20les%20lignes%20de%20niveaux...%0A%20%20%20%20plt.figure()%0A%20%20%20%20plt.contour(X1%2C%20Y1%2C%20Z)%0A%20%20%20%20plt.colorbar()%0A%20%20%20%20plt.title(%22lignes%20de%20niveaux%22)%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20aussi%20afficher%20des%20champs%20de%20vecteurs%20avec%20la%20fonction%20%60quiver%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20plt)%3A%0A%20%20%20%20X_cv%20%3D%20np.arange(-10%2C%2010%2C%201)%0A%20%20%20%20Y_cv%20%3D%20np.arange(-10%2C%2010%2C%201)%0A%20%20%20%20U%2C%20V%20%3D%20np.meshgrid(X_cv%2C%20Y_cv)%0A%0A%20%20%20%20fig_cv%2C%20ax_cv%20%3D%20plt.subplots()%0A%20%20%20%20ax_cv.quiver(X_cv%2C%20Y_cv%2C%20U%2C%20V)%0A%20%20%20%20ax_cv.set_title('Champ%20de%20vecteur%202D%20avec%20quiver')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%206.3.%20Graphiques%20en%203D%0A%0A%20%20%20%20On%20peut%20aussi%20afficher%20en%203D%20des%20fonctions%20de%20deux%20variables.%20La%20%22pr%C3%A9paration%22%20est%20la%20m%C3%AAme%20que%20pour%20les%20plots%202D%2C%20avant%20d'avoir%20recours%20%C3%A0%20la%20fonction%20%60surface%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20plt)%3A%0A%20%20%20%20Xs%20%3D%20np.arange(-5%2C%205%2C%200.25)%0A%20%20%20%20Ys%20%3D%20np.arange(-5%2C%205%2C%200.25)%0A%20%20%20%20Xs%2C%20Ys%20%3D%20np.meshgrid(Xs%2C%20Ys)%0A%20%20%20%20Rs%20%3D%20np.sqrt(Xs**2%20%2B%20Ys**2)%0A%20%20%20%20Zs%20%3D%20np.sin(Rs)%0A%0A%20%20%20%20fig_s%20%3D%20plt.figure()%0A%20%20%20%20ax_s%20%3D%20fig_s.add_subplot(projection%3D'3d')%0A%20%20%20%20surf%20%3D%20ax_s.plot_surface(Xs%2C%20Ys%2C%20Zs%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cmap%20%3D%20plt.get_cmap()%2C%20%23%20si%20comment%2C%20no%20color%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20antialiased%3DFalse)%0A%20%20%20%20fig_s.colorbar(surf)%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
f056cfa8088eb11116ad4ac10b9bb9f3