Écrêtage des valeurs d'un tableau⚓︎
L'écrêtage d'un signal consiste à limiter l'amplitude du signal entre deux valeurs x_min
et x_max
. On peut également appliquer cela aux valeurs d'un tableau. Voici par exemple un tableau valeurs
que l'on a écrêté entre \(-150\) et \(150\) pour donner le tableau valeurs_ecretees
:
valeurs = [34, 56, 89, 134, 152, 250, 87, -34, -187, -310]
valeurs_ecretees = [34, 56, 89, 134, 150, 150, 87, -34, -150, -150]
Question 1⚓︎
Compléter une fonction limite_amplitude
qui prend en paramètre un nombre x
ainsi que deux nombres x_min
et x_max
avec x_min <= x_max
et qui renvoie :
x
six
est compris entrex_min
etx_max
,x_min
six
est plus petit quex_min
,x_max
six
est plus grand quex_max
.
Exemple
>>> limite_amplitude(34, -150, 150)
34
>>> limite_amplitude(-187, -150, 150)
-150
Question 2⚓︎
Compléter la fonction ecrete
ci-dessous qui prend en paramètre un tableau de valeurs
ainsi que x_min
et x_max
avec x_min <= x_max
et renvoie un tableau des valeurs écrêtées entre x_min
et x_max
.
Exemple
>>> valeurs = [34, 56, 89, 134, 152, 250, 87, -34, -187, -310]
>>> ecrete(valeurs, -150, 150)
[34, 56, 89, 134, 150, 150, 87, -34, -150, -150]
def limitepy-undamplitude(x, xpy-undmin, xpy-undmax):bksl-nl ...bksl-nlbksl-nldef ecrete(valeurs, xpy-undmin, xpy-undmax):bksl-nl valeurspy-undecretees = ...bksl-nl for ...:bksl-nl y = limitepy-undamplitude(...)bksl-nl valeurspy-undecretees.append(...)bksl-nl return valeurspy-undecreteesbksl-nlbksl-nlbksl-nl# testsbksl-nlvaleurs = [34, 56, 89, 134, 152, 250, 87, -34, -187, -310]bksl-nlattendu = [34, 56, 89, 134, 150, 150, 87, -34, -150, -150]bksl-nlresultat = ecrete(valeurs, -150, 150)bksl-nlassert attendu == resultat, f"Erreur, la fonction a renvoyé {resultat}"bksl-nlbksl-nldef limitepy-undamplitude(x, xpy-undmin, xpy-undmax):bksl-nl if x < xpy-undmin:bksl-nl return xpy-undminbksl-nl elif x > xpy-undmax :bksl-nl return xpy-undmaxbksl-nl else:bksl-nl return xbksl-nlbksl-nldef ecrete(valeurs, xpy-undmin, xpy-undmax):bksl-nl valeurspy-undecretees = []bksl-nl for x in valeurs:bksl-nl y = limitepy-undamplitude(x, xpy-undmin, xpy-undmax)bksl-nl valeurspy-undecretees.append(y)bksl-nl return valeurspy-undecreteesbksl-nlbksl-nlbksl-nl# testsbksl-nlvaleurs = [34, 56, 89, 134, 152, 250, 87, -34, -187, -310]bksl-nlattendu = [34, 56, 89, 134, 150, 150, 87, -34, -150, -150]bksl-nlresultat = ecrete(valeurs, -150, 150)bksl-nlassert attendu == resultat, f"Erreur avec ecrete({valeurs})"bksl-nlbksl-nl
A
La fonction limite_amplitude
est composée d'une structure conditionnelle, avec trois cas.
La fonction ecrete
construit une liste vide qu'elle étend par accumulation. On aurait pu faire une liste en compréhension avec le code :
def ecrete(valeurs, x_min, x_max):
return [limite_amplitude(x, x_min, x_max) for x in valeurs]
Pour les experts
On peut avoir aussi un code avec un style fonctionnel
def ecrete(valeurs, x_min, x_max):
filtre = lambda x: limite_amplitude(x, x_min, x_max)
return list(map(filtre, valeurs))
filtre
est une fonction qui pourrait aussi être définie par
def filtre(x):
return limite_amplitude(x, x_min, x_max)
Le constructeur lambda
permet de définir une fonction anonyme, c'est parfois utile comme paramètre passé à une autre fonction.
Z