Python (école d'ingénieur) · Chapitre 8 · Exercice
Filtrage et statistiques conditionnelles
Calcul scientifique avec NumPy
Énoncé
Soit un tableau de notes d'étudiants (10 étudiants, 4 matières) :
notes = np.random.randint(0, 21, size=(10, 4))
matieres = ['Maths', 'Physique', 'Informatique', 'Anglais']
Répondre aux questions suivantes sans utiliser de boucles :
- Quels sont les étudiants (indices) qui ont une moyenne supérieure à 12 ?
- Quelle est la note maximale dans chaque matière ?
- Combien d'étudiants ont eu moins de 8 dans au moins une matière ?
- Créer un tableau booléen indiquant les notes supérieures ou égales à 10.
Corrigé
import numpy as np
np.random.seed(42)
notes = np.random.randint(0, 21, size=(10, 4))
matieres = ['Maths', 'Physique', 'Informatique', 'Anglais']
print("Notes des étudiants (lignes = étudiants, colonnes = matières) :")
print(notes)
print()
# 1. Étudiants avec moyenne > 12
moyennes = np.mean(notes, axis=1)
bons_etudiants = np.where(moyennes > 12)[0]
print(f"Étudiants avec moyenne > 12 : indices {bons_etudiants}")
print(f"Leurs moyennes : {moyennes[bons_etudiants]}")
print()
# 2. Note maximale par matière
max_par_matiere = np.max(notes, axis=0)
print("Notes maximales par matière :")
for i, mat in enumerate(matieres):
print(f" {mat}: {max_par_matiere[i]}")
print()
# 3. Étudiants avec au moins une note < 8
en_difficulte = np.any(notes < 8, axis=1)
nb_en_difficulte = np.sum(en_difficulte)
print(f"Étudiants avec au moins une note < 8 : {nb_en_difficulte}")
print(f"Leurs indices : {np.where(en_difficulte)[0]}")
print()
# 4. Tableau booléen notes >= 10
notes_sup10 = notes >= 10
print("Tableau booléen (notes >= 10) :")
print(notes_sup10)
print(f"Proportion de notes >= 10 : {np.mean(notes_sup10):.1%}")
L'exécution de ce script affiche :
Notes des étudiants (lignes = étudiants, colonnes = matières) :
[[ 6 19 14 10]
[ 7 6 6 0]
[ 1 4 3 9]
[ 2 18 1 20]
[ 4 2 11 6]
[ 1 7 18 17]
[ 1 13 11 12]
[ 9 7 17 5]
[ 1 19 5 3]
[14 20 5 16]]
Étudiants avec moyenne > 12 : indices [0 7 9]
Leurs moyennes : [12.25 12.5 13.75]
Notes maximales par matière :
Maths: 14
Physique: 20
Informatique: 18
Anglais: 20
Étudiants avec au moins une note < 8 : 8
Leurs indices : [0 1 2 3 4 5 7 8]
Tableau booléen (notes >= 10) :
[[False True True True]
[False False False False]
[False False False False]
[False True False True]
[False False True False]
[False False True True]
[False True True True]
[False False True False]
[False True False False]
[ True True False True]]
Proportion de notes >= 10 : 32.5%100 % gratuit
La suite du chapitre est sur Adloun
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.