Skip to article frontmatterSkip to article content

contenu de ce notebook (sauter si déjà acquis)

# on importe la librairie numpy
import numpy as np
from matplotlib import pyplot as plt

qu’est-ce que la vectorisation ?

%%timeit
n = 1000000
x = np.linspace(0, 2*np.pi, n)

# la bonne façon
np.sin(x)         # np.sin appliquée au tableau x
65 ms ± 19.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# pour comparer les choses comparables
import math
%%timeit
n = 1000000
x = np.linspace(0, 2*np.pi, n)

# la mauvaise façon
for e in x:             # une boucle for sur un tableau numpy
                        # c'est toujours une mauvaise idée
    math.sin(e)
538 ms ± 156 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

dessiner un cercle de rayon r

exercice

Dessinez un cercle de rayon r

indices

  1. x=rsin(θ)x = r\, sin(\theta)
    y=rcos(θ)y = r\, cos(\theta)
    avec θ variant de 0 à 2π2\pi
  2. si votre cercle apparaît elliptique, c’est que les échelles de vos axes diffèrent
    demandez à ce qu’elles soient égales avec plt.axis('equal')
# votre code

calculer une fonction polynomiale

exercice

  1. faites une fonction qui retourne le calcul d’un polynome
    par exemple x3+2x25x+1x^3 + 2x^2 -5x +1
    (puissance: ** ou np.power)

  2. appliquez la directement à un np.ndarray (sans faire de for) qu’obtenez-vous en retour ?

  3. tracez la courbe de la fonction

# votre code ici
def scalar_function(x):
    pass

les ufunc

qu’est-ce qu’une ufunc


quelles sont les fonctions vectorisées ?


savoir si une fonction est une ufunc

# essayez !
np.power
<ufunc 'power'>

pour vectoriser une fonction

exercice

  1. écrivez une fonction qui calcule la valeur absolue d’un scalaire x absolute(x)
  2. testez votre fonction sur des scalaires
  3. créez un np.ndarray de scalaires et appliquez-lui la fonction
  4. que se passe-t-il ?
# votre code ici