Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →