diff --git a/cours-06.html b/cours-06.html new file mode 100644 index 0000000..619ca48 --- /dev/null +++ b/cours-06.html @@ -0,0 +1,376 @@ + + + + + + + Informatique 6   axes numpy, matplotlib + + + + + + + + + + + + + + + + + +
+ +
Please wait, while our marmots are preparing the hot chocolate…
+ +
+ +# @chunk: chunks/title.md + +# @chunk: chunks/objectives.md + +## Informatique {var-cours-n} : Plan {#plan overview} +- Numpy : rappels, agrégations et axes {npaxes} +- Numpy : lecture de csv {npcsv} +- Bibliothèque Matplotlib : premier contact {matplotlibintro} +- Cas d'utilisation {usecases} +- Matplotlib : principes {matplotlibprinciples} + + + + +# @copy:#plan: %+class:inred: .tdlogistique + +## « TD » de Lundi {libyli} +- Inscription ? +- Écrire « **TD** » devant votre nom (sur la feuille d'émargement) + + + +# @copy:#plan: %+class:inred: .npaxes + +# @chunk: chunks/q/np-shape-1.md +# @chunk: chunks/q/np-shape-3.md +# @chunk: chunks/q/np-shape-4.md +# @chunk: chunks/q/np-shape-5.md +# @chunk: chunks/q/np-shape-6.md + +## Tranches de listes Python {libyli} +- Rappel : accès à un élément d'une liste `la_liste[l_indice]` +```python +a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] +print(a[3]) # 30 +{slide} +``` +- Extraction d'une sous partie de liste +```python +b = a[3:6] +print(b) # [30, 40, 50] + +# avec un pas de 2 +c = a[3:6:2] +print(c) # [30, 50] +{slide} +``` +- Équivalent à +```python +b = [a[i] for i in range(3, 6)] + +c = [a[i] for i in range(3, 6, 2)] + +# rappel : équivalent à +c = [] +for in range(3, 6, 2): + c.append(a[i]) +{slide} +``` + +## Tranches en Python : raccourcis {libyli} +- Omission des indices {anim-continue} +```python +a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] +{slide} +``` +- Début et fin automatique +```python +print(a[:3]) # [0, 10, 20] +print(a[5:]) # [50, 60, 70, 80, 90] +{slide} +``` +- Avec un pas +```python +print(a[:5:2]) # [0, 20, 40] +print(a[5::2]) # [50, 70, 90] + +# et que le pas +print(a[::3]) # [0, 30, 60, 90] +{slide} +``` +- Astuces +```python +print(a[:]) # une copie de a + +# pas négatif +print(a[::-1]) # [90, 80, 70, 60, 50, 40, 30, 20, 10, 0] +print(a[::-3]) # [90, 60, 30, 0] +{slide} +``` + +## Indices et tranches Python : indices négatifs {libyli} +```python +a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] +{slide} +``` +- Indices à partir de la fin +```python +print(a[-1]) # 90 +print(a[len(a)-1]) # 90 + +print(a[-3]) # 70 +print(a[len(a)-3]) # 70 +{slide} +``` +- Marche aussi en tranches +```python +print(a[1:-1]) # 10 ... 80 +print(a[1:len(a)-1]) # 10 ... 80 + +print(a[:-3]) # 0 ... 60 +{slide} +``` + + +# @chunk: chunks/q/np-slice-1.md +# @chunk: chunks/q/np-slice-2.md +# @chunk: chunks/q/np-slice-3.md +# @chunk: chunks/q/np-slice-4.md +# @chunk: chunks/q/np-shape-slice-1.md +# @chunk: chunks/q/np-shape-slice-1b.md +# @chunk: chunks/q/np-shape-slice-2.md + + +## Numpy : fonctions d'agrégations {libyli} +```python +a = np.random.uniform(0.95, 1.05, (20, 50)) + +print(a.shape) # (20, 50) +print(a.size) # 1000 +{slide} +``` +```python +print(a.sum()) # ≈ 1000 +{slide} +``` +```python +print(a.mean()) # ≈ 1 +print(a.var()) # ≈ 0.0008333 (0.1² / 12) +print(a.std()) # = a.var() ** 0.5 +{slide} +``` +```python +print(a.min()) # ≳ 0.95 +print(a.max()) # ≲ 1.05 +{slide} +``` +- Indice du min/max +```python +b = np.array([[10, 20, 30], + [60, 50, 40]]) + +print(b.argmin()) # 0 +bligne = b.reshape((-1,)) +print(bligne.argmax()) # 3 + +print(b.argmax()) # 3 (comme si en ligne) + +print(np.unravel_index(b.argmax(), b.shape)) # (1, 0) +{slide} +``` + +## Numpy : axes d'un tableau {libyli} +- Axes d'un tableau ? + - un axe est une dimension du tableau (numérotés en partant de 0) + - *shape* correspond donc aux nombres d'éléments selon chaque axe +- Illustration + +@SVG: media/numpy/axes.svg 800 200 {slide} + +```python +a = np.arange(21).reshape((3, 7)) +print(a) + +print("Selon l'axe 0, il y a", a.shape[0], "valeurs") +print("Selon l'axe 1, il y a", a.shape[1], "valeurs") +{dense slide} +``` + +## Numpy : axes et agrégations {libyli} +- Les fonctions d'agrégation (min, max, sum, mean, ...) acceptent deux paramètres + - `axis`: l'axe selon lequel agréger (c'est l'axe qui va « disparaître »),
avec `np.sum` et un tableau à 2 dimensions : + - `axis=0` : sommer chaque colonne + - `axis=1` : sommer chaque ligne + - `keepdims`: pour décider si l'axe disparaît ou est réduit à un élément + - `keepdims=False` (par défaut), l'axe disparaît totalement + - `keepdims=True`, l'axe est conservé, il n'a alors plus qu'un élément +- Exemple +```python +a = np.ones((3, 7)) +print(np.sum(a)) # 21 + +print(np.sum(a, axis=0).shape) # (7,) +print(np.sum(a, axis=1).shape) # (3,) + +print(np.sum(a, axis=0, keepdims=True).shape) # (1,7) +print(np.sum(a, axis=1, keepdims=True).shape) # (3,1) +print(np.sum(a, keepdims=True).shape) # (1,1) +{slide} +``` +- Avancé (pour les tableaux à $n>2$ dimensions) + - il est possible de passer un tuple à `axis`, par ex, `axis=(0, 1)` + +# @chunk: chunks/q/np-aggr-shape-1.md +# @chunk: chunks/q/np-aggr-shape-2.md +# @chunk: chunks/q/np-aggr-shape-3.md +# @chunk: chunks/q/np-aggr-shape-4.md + + + + + +# @copy:#plan: %+class:inred: .npcsv + +## Numpy : lecture de fichier texte {libyli} +- Fichier de donnés textuels + - CSV : *Comma-Separated Values* + - valeur séparées par des virgules + - NB: le « . » est utilisé pour les nombres réels en programmation + - il existe aussi TSV (*Tabulation-Separated Values*) {slide} +- Exemple CSV (ici, 3 valeurs par ligne) +``` +1219,5,89.57 +1220,9,89.66 +1221,22,89.88 +1222,22,90.10 +1223,8,90.18 +1224,16,90.34 +1225,18,90.52 +1226,13,90.64 +1227,1,90.65 +... +{slide} +``` +- Lecture avec la fonction genfromtxt de Numpy +```python +a = np.genfromtxt('monfichier.csv', delimiter=',') + +print(a.shape) # (..., 3) dans l'exemple +{slide} +``` + + + +# @copy:#plan: %+class:inred: .matplotlibintro + +## Matplotlib : exemple +```python +from matplotlib import pyplot as plt + +x = np.linspace(0, 10, 2000) +y = x**3 +z = (10+x)**2 + +plt.plot(x, y, label="courbe 1") +plt.plot(x, z, label="courbe 2") +plt.legend() + +#plt.savefig('courbes.pdf') +plt.show() +``` + + + +# @copy:#plan: %+class:inred: .usecases + +# Retour sur $\pi$ : agrégation, courbes + +# Illustration de Numpy + Matplotlib : affichage des pas (quand on marche) +- {comment} + - np.genfromtxt(..., separator=',')n + - cf prep/steps + + +# @copy:#plan: %+class:inred: .matplotlibprinciples + +## Pyplot : `from matplotlib import pyplot as plt` {libyli} +- Matplotlib permet de + - tracer des figures + - tracer des courbes, histogrammes, etc + - sauver dans un fichier image + - afficher de manière interactive +- `from matplotlib import pyplot as plt` + - `plt` pour simplifier les taches simple avec une courbe +- Quelques fonctions {libyli} + - `plt.truc(...)` + - plot, savefig, show, ... + - scatter, bar, barh, contour, contourf, + - xlabel, ylabel, xticks, yticks, legend, grid, title, ... + - text, annotate, ... + - imshow, ... +- http://matplotlib.org/api/pyplot_summary.html + +## Matplotlib : apparence des courbes +- Paramètres de `plt.plot()` + +# OK {no-print} + + +
+ + +

/ will be replaced by the authorwill be replaced by the title

+ + + + + +
+ + + + + + + + + + + diff --git a/index.html b/index.html index 066bac4..c77e536 100644 --- a/index.html +++ b/index.html @@ -50,6 +50,7 @@
Biblio, Fonct., Algo
π, intro Numpy
Numpy, indices, tranches
+
Numpy, tranches, axes