a Pragmathiques
Mad
[email protected]
Cours « conquérir Python »
La référence ultime
pour les étudiants de prépa HECPrograthaues
Sommaire
I] VARIABLES ET INSTRUCTIONS DE BASE 5
A] Variables int float et bool... 5
41) Comment utiliser une variable dans Python... 5
nese 8
3) Les variables de type int et float 8
4) Les variables booléennes ... 2
B] Instructions et fonctions. 14
2) Les instructions d’affichage print et input 14
2) Les fonctions classiques et la Bibliotheque math “17
3) Créer sa propre fonction avec def ..
Les listes
ve 24
1) Création de listes en extension.
2) Rajouter et supprimer des éléments ou des listes... Py
3) Vénumérateur range. 27
4) Création d’une liste en compréhension. 30
5) Autour de t'indexation d'une liste : modification, insertion et suppression... 32
6) Copier une liste 37
7) Rechercher dans une list... sont
8) Opérations sur une liste...
9) Trier une liste 40
10) Permutation a soni a2
D) Les boucles if, for et while : ntroduction.. 43
1) Les boucles if. 43
2) initiation aux boucles for
3) Initiation aux boucles while
2023-2024
Copyright © Pragmathiques 2023Progmetniques
Il] MATRICES : PREMIERES NOTIONS.
0) Importation de la biblioth@que Numpy
1) Conception de matrices comre
2) Extraction et modifications d' éléments d'une matrice.
3) Créations spécifiques de vecteurs lignes
4) Calcul entre les matrices
5) Inverse et transposée d'une matrice
6) Matrices et fonctions 1* partie.
7) Comparaisons des coefficients d’une matrice
IIT] DEF, IF ELSE ET RESOLUTIONS D’EQUATIONS...
1) Utilser def avec plusieurs variables de sortie,
4) Résolutions de systémes..
IV] GRAPHES EN 2D
0) Importer la biblioth&que matplotiib. pyplot...
Al Tracer une courbe.
1) Ligne brisée avec plt.plot
2) « Courbe lisse » avec plt.plot...
3) Les options de tracé....
4) Représenter une suite...
5) Modifier le repére
8B] Tracer plusieurs courbes.
\V] BOUCLES WHILE & FOR ET SUITES...
1) Suites arithmético-géométrique.
2) Suites croisées, ee
VI] SOMMES ET PRODUITS...
AJ Calculs de sommes
1) Différentes méthodes pour calculer une somme
49
A
62
65
70
oT
82
1 86
86
a9.
92
oe 92.
93
93
95
96
101
103,
106
108
120
122
122
eada2
2023-2024
Copyright © Pragmathiques 2023,FProgmatiques
2) Calcul de fa somme de termes impair
8] Calcul de produits
1) Calcul de produits sur le modéle précédent avec les sommes
2) Les fonctions pour calculer ni
Vil] SIMULATIONS ET PROBABILITES 1** partie...
0] importer la bibliothéque numpy.random..
A] Le principe de la simulation d'une variable aléatoire.....
B] La commande rd.random
1) rd.random()
2) rd.randomin) x.
3) rd.randomi(n,m))
4) Simulation d’un lancer de dé.
5) Simulation d’une loi uniforme sur a, b avec np.rand .
6) Loi uniforme et histogramme
C] Les simulations des lois discrétes avec rd...
1) Loi binomiale et de Bernoulli
2) Loi uniforme discréte..
3) Loi géométrique.
4) Loi de Poisson
D] Les simulations des los de v
1) Loi uniforme & densité
2) Loi exponentielle.
3) Loi normale
4) Lien entre histogramme et densité de probabilité.....
5) Loi gamma (maths approfondies)
125
128
128
BL
133
133
134
135
135
13s
136
136
137
138
140
ve 140
147
151
153
155
155
155
1 156
158
160
2023-2024
Coprright © Pragmathiques 20232023-2024
Proomathiqu
T] VARIABLES ET INSTRUCTIONS DE BASE
A] Variables int float et bool
Dans ce A], toutes les instructions sont tapées dans Shell,
1) Comment utiliser une variable dans Python
Comprendre l'affectation avec le signe =
Le signe = signifie en langage Python « j'affecte la valeur située & droite du signe = a la
variable située 8 gauche de la variable ». (Nous verrons plus tard que « égal 8 » s‘écrit == en
Python}.
La variable n’est pas forcément une lettre unique. Une variable est formée par
* Une suite de lettres
© Eventuellement _
© Eventuellement un ou des chiffres
Dans Python 7,5 s'écrit 7.5,
Affichage du contenu d’une variable dans Shell
Ici, le nom de la variable est C et 5 est la valeur contenue dans la variable.
Si je pose la variable sans rien mettre d’autre dans Shell, Python me donne la valeur contenue
dans la variable. En revanche, dans l'exécution dans le module, il ne sera pas affiché,
Crest pourquoi souvent dans les exercices, on utilisera instruction print (que l'on verra dans
lea).
Sila variable ne contient rien, un message d’erreur s'affiche.
Voici ce que ¢a donne dans Shell (donc sans avoir besoin d’utiliser print)
Copyright © Pragmathiques 2023,Progmatriques
Traceback (most recent call last):
File "
", line 1, in
D
NameError: name 'D
is not defined
Affichage du contenu d’une variable avec print
instruction print permet d’afficher le contenu d'une variable.
>>> print (Variable_1)
On verra d'autres fagons dutiiser print par la suite.
Python tient compte de la casse (majuscule/minuscule)
>>> VARIABLE_1=9
> print (Variable_1)
2023-2024
Copyright © Pragmathiques 2023,Promathiqu
Noms de variables interdits
Un nom de variable ne peut pas
© Etre réduit 3 un chiffre ou des nombres
© Commencer par un chiffre
© Etre une suite de caractére entre guillemets ou’
SyntaxError: jot assign to literal here. Maybe you meant
instead of
IR:
SyntaxError: invalid decimal literal
"salut '=12
SyntaxError: cannot assign to literal here. Maybe you meant
te=' instead of
Supprimer ce qui est contenu dans une variable
La fonction del permet de supprimer la valeur contenue dans une variable.
>>> Ae8
>>> print (A)
8
>>> del A
>>> print (a)
‘Tracebac
(most recent call last):
File "
print (A)
NameError: name is not defined
2023-2024
Copyright © Peagmathiques 20232023-2024
2)Le#etle;
Le point-virgule
Le point-virgule dans Python permet de mettre plusieurs commandes différentes sur une
méme ligne.
Ce n'est pas trés visuel pour tes programmes, mais cela permet d’économiser du papier pour
le concepteur de sujet. Done tu peux le rencontrer dans un programme,
34:prin|
) sprint (E)
# permet de commenter une commande
Le# permet ’écrire du texte qui n’est pas pris en compte par Python.
Crest trés utile pour expliquer le code & quelqu’un quite lit,
Dans ton cas, c’est utile pour expliquer au correcteur ce que tu fais. Et c'est utilisé par les
concepteurs du sujet pour te donner des indications sur le programme.
>>> Ae4+81 #0n applique la somme de 4+81 a la variable A
>>> print (A)
85
3) Les variables de type int et float
Les types int et float
Les variables de type int sont des nombres entiers.
Les variables de type float sont des nombres réels a virgule (on dit que c'est un type flottant).
Sion met une « virgule » (donc un point) & un entier, Python considére qu'il s‘agit d'une
variable de type float.
Pour savoir le type d'une variable, on utilise la fonction type.
Copyright © Pragmathiques 20234 2023-2024
>>>
>>> type (A) stype (B) stype (C)
vint'>
Calculs sur les variables de type int et float.
La multiplication se fait avec *
La division se fait avec / et le résultat obtenu est toujours de type float (méme s'il est un
entier).
48 stécrit a3
>>> print (7+2)
>>> print (4-2)
2
>>> print (5*4)
20
>>> Ae12/6
>>> Be15/2
>>> print (A)
2.0
>>> print (B)
15
>>> type (A)
>>> print (4**3)
64
Copyright © Pragmathiques 2023,Frogmatiques
Quand la variable contient une valeur est qu'elle est utilisée dans un calcul, on considére alors
pour le calcul, la valeur contenue dans la variable.
Le résultat du calcul peut étre inséré dans une nouvelle variable ou dans la méme variable. La
valeur précédente est alors remplacée par la nouvelle valeur.
CHA
print (Cc)
2.0
>> Daa
>>> print (D)
D=p+10
>>> print (D)
Les divisions euclidiennes
// calcule le quotient de la division euclidienne,
% calcule le reste de la division euclidienne.
>>> print (9/2)
4.5
Chaines de caractéres (type str)
Pour créer une chaine de caractéres, on peut la mettre entre guillemets ou entre
apostrophes.
Sion veut que la chaine de caractéres contienne une apostrophe, on V'entoure de guillemets.
2023-2024
Copyright © Pragmathiques 2023
10>>> Ae"Pragmathiques"
>>> Be! Prépa’
>>> E="* Pragmathiques'”
>>> type (A) ;type(B)
>>> print (A)
Pragmathiques
>>> print (E)
*Pragmathiques'
>>> De"1'informatique est importante aux concours"
>>> print (D)
Ltinformatique est importante aux concours
(On peut concaténer des chaines de caractéres, y compris des variables, avec le signe +
(attention de laisser des espaces & lintérieur des apostrophes).
>>> C="Python par ‘4At" "4B,
>>> print (C)
Python par Pragmathiques Prépa
Une chaine de caractéres peut ne contenir que des nombres.
>>> Ast 1!
>>> Bet!
>>> print (AtB)
On a concaténé 1 et 1 pour former 11 (JCDV est content !)
>>> print (A*4)
uuu
2023-2024
Copyright © Pragmathiques 2023,
nFrogmathiques
Ici le “4 indique que t'on va faire répéter a chaine de caractére quatre fois.
>>> CeMBonjour"™
>>> print (C#3)
BonjourBonjourBonjour
4) Les variables booléennes
>>> AeSB
>>> print (
False
>>> print (
‘As=2 signifie « A est-il 6gal 82?»
55 étant la valeur contenue dans A, la réponse est non. On renvoie alors Ia valeur False
Pour le deuxiéme la réponse est true,
On peut faire ces tests avec plusieurs opérations.
# est noté I= en Python.
>>> print (A==B)
>>> print
True
>>> print (Ac=C)
>>> print (A>=C)
True
>>> print (A>C)
False
>>> print (A!=C)
False
Copyright © Pragmathiques 2023,
2023-2024
22023-2024
Un test avec and donne true si les deux résultats sont justes.
Un test avec Or donne true si au moins I'un des résultats est juste.
>>> print (Ae=B and A:
False
>>> print (Ae=B or A==C)
Quand une variable contient la valeur true, elle est considérée dans un calcul comme
contenant la valeur 1.
Quand une variable contient la variable false, elle est considérée dans un calcul comme
contenant la valeur 0
Le type de ces variables est noté bool comme booléen.
>>> E=(Ae=C)
>>> F=(ADC}
>>> print (E)
>>> print (F)
False
>>> print (+2)
print (F+2)
>>> type (E}
Copyright © Pragmathiques 2023 a2023-2024
Progmatniques
B] Instructions et fonctions
1) Les instructions d’affichage print et input
Uinstruction print
instruction print permet d’afficher ce qui est entre parenthése,
Lorsque l'exoression est entre guillemets (ou entre apostrophel, elle affiche exactement ce.
qui est écrit. Sinon elle affiche les valeurs qui sont dans la variable.
>>> print (A)
>>> print ("A")
>>> print ("A")
(On peut associer des valeurs mises entre guillemets ou entre apostrophes et d'autres dont on
‘met la valeur. On les sépare par une virgule ou avec +.
>>> print ("Bonjour, je veux ", A, ‘tablettes de chocolat noir!)
Bonjour, je veux 4 tablettes de chocolat noir
Attention, le + ne marche que si toutes les valeurs sont en format str.
>>> print ("Bonjour, je veux "tA+'tablettes de chocolat noir")
Traceback (most recent call last):
File "", line 1, in
print ("Bonjour, je veux "+A+'tablettes de chocolat
Typeerri
n only concatenate str (not ) to str
>>> print ("Bonjour, je veux 4"+' tablettes de chocolat noir')
Bonjour, je veux 4 tablettes de chocolat noir
Copyright © Pragmathiques 2023, 14Z 2023-2024
Froomathiques
instruction input
instruction input réécrit sur la console la phrase mise entre guillemets. Ce qui a été tapé a la
suite de cette phrase par l'utilisateur est alors affecté dans la variable précédant le signe
Par défaut Python considére que ce qui est tapé par l'utilisateur est une chaine de caractéres
(done de type str).
Pour que Python « convertisse » la variable en entier on lui applique Vinstruetion int(). Pour
que Python la « convertisse » en flottant, on lui applique instruction float().
En revanche, si la valeur rentrée ne correspond pas au type demandé, un message d’erreur
apparait.
>>> nsinput ("Entrez un entier naturel : ')
tvez un entier naturel : 4
>>> print (n) \
4 offiché Tapé por l'utilisateur
>>> type(n)
>>> print (n*2)
44
On retrouve ce qu'on avait vu précédemment, le * nous fait répéter la chaine de caracteres
(car ici 4 et de classe ‘str’.
>>> print (n+2)
Traceback (most recent call las
File "", line 1, in print (n+2)
‘TypeError: can only concatenate str (not “int") to str
Ilya un message d’erreur car on ne peut pas addionner un entier et une chaine de caractéres.
>>> meint (input ("Entrez un entier naturel : '))
Entrez un entier naturel : 4
>>> print (m)
Copyright © Pragmathiques 2023 152023-2024
>>> print (m*4)
16
Sila variable ne correspond pas & ce qui était demandé, ¢a bug
>>> isint (input ("Entrez un entier naturel : '))
Entrez un entier naturel : 4.2
Traceback (most recent call last):
File “", line 1, in
isint (input ("Entrez un entier naturel : '))
ValueError: invalid literal for int() with base 10: '4.2°
>>> j=float (input ("Entrez un entier naturel : ')}
Entrez un entier naturel : 4
>>> print (3)
4.0
>>> type(s)
(On remarque que quand on additionne un entier et un float, Python convertit 'entier en float
pour pouvoir faire Yopération.
>>> print (m+)
8.0
>>> Prénor
put ("Quel est ton prénom ? ")
Quel est ton prénom ? Greg
>>> print ("Bonjour ",Prénom,". Comment vas-tu 2")
Bonjour Greg . Comment vas-tu ?
>>> print ("Bonjour "+Prénom+". Comment vas-tu 2")
Bonjour Greg. Comment vas-tu ?
Copyright © Pragmathiques 2023 16Programe
2) Les fonctions classiques et la bibliotheque math
Les fonctions classiques
|x| seri:
>>> print (abs (~4))
25 s'écrit :
>>> print (25**0.5)
5.0
Notons que pour calculer la racine, il existe une autre fagon avec la bibliothéque math.
La fonction round
La fonction round donne l'arrondi. Attention cependant les régles sont assez spéciales.
Sion met round() avec juste le nombre, il donne l'arrondi a 'entier prés.
Le cas du 5 est assez particulier.
Sie nombre est & mi-chemin entre deux entiers, il donne Ventier pair le plus proche.
>>> print (round (2.4))
print (round(2.5))
51))
>>> print (round(3.5))
Pour contourner ce probléme, on peut créer notre propre fonction avec une bouce if (voir
par ailleurs)
2023-2024
Copyright © Pragmathiques 2023,Progmathiques
La fonction round(x,y) renvoie un arrondi de x a y décimales prés.
>>> print (round
1.414
*40.5,3))
On retrouve la méme particularité avec 'arrondi au pair le plus proche quand on utilise le
round(x,y)
>>> print (round (5.185, 2))
5.18
>>> print (round (5.195, 2))
18 est pair donc 'arrondi est 5,18
19 est impair donc on arrondit au pair le plus proche, done 20
Les opérateurs issus de la bibliothéque math
Beaucoup de fonctions et méme 7 ne sont pas reconnues par Python
Elles sont contenues dans le module math qu'il faut importer avant de I'utliser.
Pour cela, on écrit import math,
V2 est appelé avec m: yet (2)
In(1) est appelé avec math. 10g
e? est appelé avecnath.exp (2)
rest appelé avecniath.pi
math. floor donne la partie entire
maths . ceil donne Fentier au-dessus.
import math
rt (2))
4142139623730951
>>> print (math. 1og(1))
0.0
>>> print (math.exp(2))
389
6098930
2023-2024
Copyright © Pragmathiques 2023,>>> print (math. sqrt (25) )
ath. pi/2
>>> print (A)
1.5707963267948966
>>> print (math. floor (3.7)}
3
>>> print (math. floor (-5.2))
6
>>> print (math.ceil(5.1))
6
La bibliothéque math avec import math as m
On peut importer la bibliothéque math avec un raccourci pour que les fonctions appelées
soient précédées dem. plutdt que dematn.
import math as m
>>> print (m.sart (2)
1.4142135623730951
>>> print (m.1log(1))
0.0
>>> print (m.exp(2))
7, 3890560993065
>>> print (m.pi)
3.141592653589793
>>> print (m.£loor(5.2))
>>> print (m.ceil (5.1)
6
2023-2024
Copyright © Pragmathiques 2023
192023-2024
Progmathique
La biblioth@que math avec from math import*
Quand on utilise from math import®, tous les éléments du module math sont importés.
lIn’y a done pas besoin de faire précéder les fonctions de math. ou de m.
from math import
>>> print (sqrt (2)
1,4142135623730951
int (1og(1)
>>> print (exp (2))
7,38905609893065
>>> print (pi)
3.141592653589793
floor (3.7))
Cette importation peut poser un probléme car elle peut rendre moins lisible le code. En effet,
des fonctions existent dans plusieurs bibliotheques (cos par exemple existe dans math et dans
lumpy).
La fonction “cos()" de "mat
calcule le cosinus d'un angle en radians, tandis que la fonction
"cos)" de “numpy" calcul le cosinus d'un tableau dangles en radians. Sion utilise les deux
bibliothéques dans un programme et qu’on n'utilse pas les prédécesseurs math. m. etc. avant
pour 'une des fonctions "cos(), ily aura un conflt de nom lorsqu’on appellera la fonction
“cos()", car Python ne saura pas laquelle des deux fonctions utiliser.
Trigonométrie
La fonction round est utile quand on utilise a trigonométri.
En effet, parfois les valeurs ne sont pas « exactes » car le 1 utilisé avec math.pi est une valeur
approchée. On procéde comme cela,
Copyright © Pragmathiques 2023 20ames
import math
>>> Aemath.pi/2
>>> print (A)
1.5707963267948966
>>> print (math. sin(A))
1.0
>>> print (math.cos (A) )
6.123233995736766e-17
>>> print (math.cos (math. pi/2))
6. 1232339957367 660-17
>>> print (math. tan(math.pi/4))
0.9999999999999999
>>> print (round (math. cos (math.pi/2),2))
0.0
>>> print (round (math. tan (math. pi/4),2))
1.0
import math as m
>>> print (m.sin(m.pi))
1, 2246467991473532e-16
>>> print (m.cos(m.pi))
-1.0
>>> print (m.tan(m.pi/4))
9..9999999999999999
>>> print (round (m.sin(m.pil))
°
>>> print (round(m.tan (m.pi/4)))
1
2023-2024
Copyright © Pragmathiques 2023,
a2023-2024
3) Créer sa propre fonction avec def
Exemple avec def f(x)
Pour éviter de répéter plusieurs lignes de codes, on peut créer une fonction qui renvoie
chaque fois les résultats.
Si par exemple on veut les images de ~4, 2 et 5 dela fonction f : x + 7x7 +1
>>> def F(x
return 7*x**3+1
Instruction en retrait (on dit,
qu'elle est indentée}
On peut mettre plusieurs lignes avant de mettre return,
>>> def paf(x):
oe xt 83
urn AtL
>>> Aspat(-4
>> print (A)
447
Copyright © Pragmathiques 2023
2A 2023-2024
Progmothiques
Instructions indentées
Le retrait des lignes qui suivent la ligne def permet de définir quand la fonction def s’arréte.
Tant quill y ale retrait, on est encore dans la fonction def.
Beaucoup de langages de programmation utilisent des caractéres de ponctuation, tels que les
accolades ({}) ou les mots-clés (begin/end, do/end) pour ouvrir et fermer les boucles,
instructions ete.
Python utilise les mises en retrait des instructions jusqu’a la fin de I'instruction. On dit qu’elles
sont indentées.
Crest un des facteurs qui a rendu populaire ce langage de programmation, car il rend le code
plus épuré et lisible.
En revanche, il nécessite de faire trés attention a bien indenter les instructions.
(Ceest ce qu’on verra quand on utlisera les boucles if, for et while.
On peut également mettre plusieurs variables d’entrées
‘On peut mettre autant de variables d’entrées que I'on veut dans une fonction def.
> def fpv(x,y,z
08 return 3*x+100*y+10000+2
> fpv(4,5,9)
(On verra aprés le chapitre sur les vecteurs et les matrices que ’on peut également mettre
plusieurs variables de sorties.
Copyright © Pragmathiques 2023,
2FProgmathiquer
C] Les listes
1) Création de listes en extension
Pour créer une liste en extension, on saisit les éléments entre crochets, séparés par des
virgules.
["vamos", ‘Rafa']; print (B)
Vamos', "Rafat
Les éléments ne sont pas nécessairement du méme type.
print ({12, 23.4,"Salut"])
1 23.4, Salut")
Une liste peut étre vide.
]sprint (D
2) Rajouter et supp!
La méthode append
La méthode append ajoute un élément en derniére position d'une liste existante.
Attention : on ne erée pas une nouvelle liste, mats on modifie Ia liste existante.
~4,25)
nd (12)
>> print (A)
(1, -4, 25, 12)
>>> R.appe!
>>> A. append ( "bon jou:
2023-2024
Copmtight © Pragmathiques 2023
2>>> print (A)
(1, -4, 25, 12, *bonjour']
(On peut partir d'une liste vide et créer une liste au fur et & mesure grace a la méthode
append. Ce sera trés utile dans les boucles for et while que nous verrons plus tard.
>>>
1
>>> B.append(1)
>>> Beappend (2)
>>> B.append(3)
>>> B.append ("soleil")
>>> print (B)
[1, 2, 3, ‘solei1"]
Rajouter une liste avec la méthode extend
La méthode extend ajoute tous les éléments d'une liste a la fin d'une liste préexistante,
‘Comme pour la méthode append, on ne crée pas une nouvelle liste, mais on modiffe la liste
existante,
2, 3, *soleil']
B-extend([14,5,6])
>>> print (B)
(1, 2, 3, "soleil", 14, 5, 6)
2023, 2024)
[1, 2, 3, ‘soleil’, 14, 5, 6, 8, 2023, 2024)
On peut rajouter une liste 8 une liste vide.
C.extend(A)
[2023, 2024]
Copyeight © Pragmathiques 2023
2023-2024
252023-2024
La concatenation de liste avec +
‘Avec le +, on peut concaténer deux listes.
On peut mettre cette concaténation dans une autre liste.
6
3]
(On peut également concaténer une liste préexistante, comme on I'a fait avec extend, mais.
cette fois en utilisant le +
>>> ASAE
>> print (A)
[1, 2) 3, 4 5, 6]
Cependant pour rajouter & une liste préexistante, on a tendance a utiliser extend car ¢a
apporte davantage de clarté au code. Et pour les trés grandes listes, l'utilisation de extend
serait plus rapide que +
Mais dans un sujet de concours, tout cela peut étre différent. Done il faut connaitre les deux.
méthodes.
Répétition avec *
Quand on écrit A*3, on obtient une nouvelle liste qui est la concaténation de 3 liste A (done
de la liste A répétée 3 fois),
(On peut la créer dans une nouvelle liste ou dans une liste préexistante
>>> AS[1,2,3]
16)
>>> BELA,
Copyright © Pragmathiques 2023, 26d 2023-2024
canv3
>>> print (C)
2,3,
>>> BeB*2
>>> print (B)
I, 5, 6 1 6]
Supprimer avec del
Pour supprimer un élément d'une liste d’index indéterminé en Python, on utilise la
commande del suivi dela liste et entre crochet index de I’élément que 'on veut supprimer,
>>> As[1,14,15,17,-1,7]
>>> del ALO]
>>> print (A)
(14, 15, 17,
>>> del AIS
>>> print (A)
(14, 15, 17, 71
3) L’énumérateur range
Uénumérateur range (d,0,p) et list
Les lettres : d comme départ, o comme obstacle ou ouvert et p comme pas.
Uénumérateur range(d,o,p) donne une succession d’entiers. La procédure est la suivante,
Le premier nombre est entier de départ.
Le deuxiéme nombre est « entier obstacle » ou « entier ouvert ». Leentier limite qu'on
‘atteint pas et qu’on ne franchit pas. On s‘arréte done a celui d’avant. C’est comme un
Intervalle ouvert : [d, of = [,0~ 1]
Le troisieme nombre est le pas. Il indique de combien on avance. Ce pas peut étre négatif
Copyright © Pragmathiques 2023, 7Propmathiques
Pour afficher cette succession on fait précéder le range (ou la variable ol la succession est
contenue) par lst.
>>> print (List (range(1,19,2)))
(1, 3, 5, 7, 9 11, 13, 15, 17)
>>> print (List (range (1,20,2)))
(1, 3, 5, 7, 9 22, 13, 15, 17, 19]
ange
>>> print (A)
0,-15,-3)
range(10, -15, -3)
>>> print (List (A))
(10, 7, 4, 1, 2, -8, -11, -14)
Sion veut rajouter des éléments & Ia liste, il faut le faire @ partir de la liste créée par
list(range(d,o,p)) et non par range(d,o,p}.
>>> C=A.extend([ "Bonjour", "ca va"
Traceback (most recent call last):
File "
", line 1, in
C=A.extend({ "Bonjour", "ca va"))
AttributeError: ‘range’ object has no attribute ‘extend!
>>> Delist (A)
>>> D.extend(["Bonjour", "ca va"}}
>>> print (D)
(10, 7, 4 41, -11, -14, "Bonjour', ‘ea va")
>>> Eelist (A)
>>> print (E)
(10, 7, 4, 1, -2,
>>> E.append(189)
-u1, -14)
>>> print (B)
0, 7, 4, 1, , 189)
Attention : si un des nombres d, 0 ou p n'est pas un entier, le range ne peut pas étre créé.
Copyright © Pragmathiques 2023
2023-2024
28rogmatiques
>>> List (range(1.5,19,2))
Traceback (most recent call last):
File "", line 1, in
List (range (1.5,19,2))
TypeError: 'float' object cannot be interpreted as an integer
>>> List (range(1,19.5,2))
Traceback (most recent call last):
File "", line 1, in
List (range (1,19.5,2))
‘TypeError: ‘float’ object cannot be interpreted as an integer
>>> List (range(1,19,2.5))
Traceback (most recent call last):
File "", Line 1, in
List (range (1,19,2.5))
‘TypeError: 'float' object cannot be interpreted as an integer
Si on ne peut pas constituer Ia liste car le pas n’est pas du bon signe, dans ce cas
\énumération est une énumération vide.
La liste constituée est alors une liste vide que l'on peut incrémenter.
nt (List (range (1,19,~2)))
>>>
ange (19, 1,2)
>>> print (B)
range(19, 1, 2)
>>> print (List (B))
1
>>> Beextend([1,4,7])
Traceback (most recent call last
File "", line 1, in
B.extend([1,4,7]]
AttributeBrror: ‘range’ object has no attribute ‘extend!
>>> Celist (B)
>>> Crextend([1,4,71)
>>> print (C)
I, 4, 77
2023-2024
Copyright © Pragmathiques 2023
29L’énumérateur range (4,0)
Quand on écrit range (d,0), Python considere que le pas par défaut est de 1
On a alors d qui est entier de départ et o qui est 'entier obstacle (on s‘arréte donc & 0-1),
>>> print (list (range(4,16)))
[4, 5, 6 7, 8, % 10, 11, 12,
int (list (range (14,4)))
U’énumérateur range (0)
Quand on écrit range(o}, Python considére que le pas par défaut est de 1 et que la valeur de
départ est 0.
>>> print (List (range (12)))
[Ove at zoes kd cal Crea 0 oO aE EL)
>>> print (List (range (-4)))
u
4) Création d’une liste en compréhension
Liste en compréhension sans filtrage
On peut eréer une liste en compréhension & partir des éléments dune liste initiale.
On utilise la syntaxe [valeur for élément in itérable] avec valeur qui est la valeur 8 ajouter &
chaque fois & la liste, élément est élément & partir duquel est construite cette valeur, et
‘térable est objet itérable que l'on parcourt pour prendre les éléments.
Dans beaucoup de cas itérable est une liste. Pour I'instant, on verra les cas oli itérable est une
liste.
2023-2024
Copyrent © Pragmathiques 2023,Frogmatiqves
(On peut par exemple définir une liste ot les éléments sont les carrés des nombres entiers de
1a10.
Méthode
1,2, 3, 4,516, 7,8, 9,10)
>>> Be[n**2 for n in A]
>>> print (B)
1, 4, 9 16, 36, 49, 64, 81, 100)
Méthode 2
>>> print ((n*¥2
[1, 4, 9% 16, 25, 36, 49, 64, 81, 100)
or n in range(1,11)])
Liste des 8 premiers multiples de 7 strictement positfs
>>> print ({7"i for i in range (1,9)])
[7 14, 21, 28, 35, 42, 49, 56
Liste en compréhension avec filtrage
(On peut également ajouter une condition pour choisir les éléments de Fitérable. On parle de
filtrage.
La syntaxe devient : [valeur for élément in itérable If condition)
La condition définit quels éléments seront pris dans 'térable.
Créons une liste des carrés d’entiers entre 1 et 50, mais avec les entiers entre 1 et 50 qui sont
multiples de 7,
>>> As[n*#2 for n in range(1,50) if nb
> print (A)
(49, 196, 441, 7
1225, 1764, 2401)
2023-2024
Copyright © Pragmathiques 2023
312023-2024
Progmathiques
ni est la condition : le reste de la division euclidienne de n par 7 est 0 (et donc n est
divisible par 7). Si true est renvoyé, alors le n est selectionné et il est mis au carré.
Créons la liste des diviseurs de 1998.
>>> Ae(n for n in range(1, 1999) if 1998%n=-0]
>>> print (A)
[1, 2, 3,6, % 18, 27, 3
+ 54, 74, 111, 222, 333, 666, 999, 1998
Ces diviseurs sont forcément entre 1 et 1998 donc on écrit range(1,1999) pour avoir les,
entiers entre 1 et 1998,
If 1998%0 permet de sélectionner les entiers de cette liste qui divisent 1998,
On écrit n for n car on n’a pas besoin de modifier le n initial
5) Autour de l’indexai
in d’une liste : modification, insertion et
suppression.
Indexation d'une liste
En Python, index du premier élément est 0, celui du deuxiéme est 1, celui du troisiéme est 2,
ete.
Pour accéder au 1" élément d'une liste A, on écrit AO], pour accéder au 2™, on écrit A( 11,
pour accéder au i, on écrit A [i-1)
(On peut aussi commencer par la fin. Ainsi, pour accéder au dernier élément, on écrit &
pour accéder a l'avant-dernier, on écrit A[-21, ete.
Regardons avec la liste des 11 premiers entiers positifs impairs.
>>> Ae[2*ntl for n in ran
>>> print (A)
[lp 3: 5, 7 9, 12,
>>> print (A[0])
1
Copyright © Pragmathiques 2023,
32>>> print (A[1])
3
>>> print (A[-1])
2
>>> print (A[-21)
19
>>> print (A(10])
a1
>>> print (A(12]}
Traceback (most recent call last):
File "
IndexError: list index out of range
>>> print (A[-11]}
1
>>> print (A[-12])
Traceback (most recent call last):
File "cpyshell#4>", line 1, in
print (A[-12])
IndexError: list index out of range
Modification d’une liste
>>> AL2]=
>>> print (A)
[1, 3. 1, 7 9% 11, 13, 15, 17, 19, 221
[2] =1 signifie en francais :jaffecte la valeur 1 au (2 + 1)" coefficient de A.
La liste change done avec le nombre 5 remplacé par 1
2023-2024
Copyright © Progmathiques 2023
332023-2024
Itérer les éléments d’une liste sans index
Itérer les éléments d’une liste avec index
La fonction native enumerate () parcourt une liste tout en affichant I'index de I’élément.
parcouru. La premiére variable est la position et la seconde est I'élément de la liste (par
défaut lindex démarre 8 0)
>>> for k, i in enumerate(A}:
print (k, i)
Copyright © Pragmathiques 2023,2023-2024
Mais on peut aussi « réindexer » index en rajoutant 1 8 chaque valeur de k.
>>> for k, i in enumerate(A):
print (k+1,i)
‘On peut décider de commencer I'indexation a une autre valeur que 0. On fait pour cela suivre
la liste itérée par start et la valeur par laquelle on veut commencer.
>>> for k, i in enumerate (A, start~5}:
oo print (ky i)
99
1011
1113
12.15
13.17
a4 19
35 21
Copyright © Pragmathiques 2023,
352023-2024
Progmatniqu
Insérer une valeur avec la méthode insert
Si je veux insérer la valeur 1 en 6éme position (c'est-a-dire & index 5), jutilise la méthode
insert. Les autres éléments sont décalés.
1, 11, 13, 15, 17, 19, 22)
Le premier nombre entre parenthéses est index et le second est la valeur qu'on rajoute.
Supprimer une valeur a un index déterminé avec la méthode del.
Pour supprimer Ia valeur en 4°" position (c‘est-a-dire a index 3), utilise la méthode del
>>> del AI3]
1, 11, 13, 15, 17, 19, 21)
‘Supprimer une valeur donnée avec la méthode remove.
(On peut choisir de supprimer une valeur en donnant cette valeur. La premiére occurrence de
la valeur est supprimée de la liste. Mais les éventuelles autres restent.
>>> A.insert (5
>>> print (A)
1, 3, 1, % 2, 3, 1 19) 221
>>> A. remove (
>>> print (A)
(1, 1, % 1, 3, 11, 13, 15, 17, 19, 22)
Icile premier 3 a été supprimé, mais le second reste.
Copyright © Pragmathiques 2023, 36Progmathiques
6) Copier une liste
existe plusieurs fagons de copier une liste.
>>> print ia)
a, %
>>> Bea
11, 13, 15, 17, 19, 21]
>>> A. insert (6,9)
>>> print (A)
(1, 1, 9 1, 3, 11, 9% 13, 18, 17, 19, 211
>>> print (B)
I, a, % 4,
ar 19, 21]
On voit qu’avec cette opération, toute modification de A entraine la méme modification dans
8
(On a4 méthodes pour copier sans avoir ce probleme.
>>> C=A.copy()
>>> Delist (A)
Alt]
>>> Fe[n for n in Al
>>> A.insert (7,1)
>>> print (A)
1, 1, % I, 3, 11, 9% 1, 13, 15, 17, 19, 221
>>> print (C)
(1, 1, % 1, 3, 11, 9, 13, 15, 17, 19, 211
>>> print (D)
9% 1, 3, 11, 9% 13, 15, 17, 19, 221
>>> print (E)
9% 1, 3, 11, 9% 13, 15, 17, 19% 21)
>>> print (F)
% 1,
11, 9, 13, 15, 17, 19, 21)
(On voit qu‘ici, aucune des listes n'a été modifié par I'insertion du 1.
2023-2024
Copyright © Pragmathiques 2023,
7Frogmathiques
7) Rechercher dans une liste
Test si un élément appartient a une liste avec la commande in
Crest un test qui prend la valeur true ou la valeur false.
>>> print (1 in A)
(12 in ay
‘Compter les occurrences d’une valeur dans une liste
On utilise .count{i) avec i étant la valeur dont on veut savoir combien de fois elle est présente
dans la liste
fara
>>> print (A.count (1) }
1, 3, 1, % 1, 13,
>> print (A. count (9) }
2
>>> print (A.count (4)}
Lest présent 4 fois dans la liste A.
9 est présent 2 fois dans la liste A.
4 nest pas présent dans la liste A.
Rechercher la premiére occurrence d’une liste
La commande . index (i) renvole indexation du premier élément i dans la liste.
>>> print (A. index (3
2023-2024
Copyright © Pragmathiques 20232023-2024
Progmathiques
>>> print (A.index(1))
0
Dans la liste A, le premier chiffre 3 est en 5*™ position, donc & indexation numéro 4,
Dans la liste A, le premier chiffre 1 est en 1** position, donc a "indexation numéro 0.
>>> print (A. index (14))
Traceback (most recent call last):
File "", line 1, in
print (A. index (14))
ValueError: 14 is not in li
La valeur 14 n’étant pas présente dans la liste, un message d’erreur s‘affiche.
8) Opérations sur une liste
Compter le nombre d’éléments avec len
La commande len(A) renvoie la longueur de la liste A, donc son nombre d’ éléments.
1,1, % 4, 3,
>>> len (A)
1, 13, 15, 17, 19, 21]
Sommer les éléments d’une liste avec sum
>>> sum(A)
121
Copright © Pragmathiques 2023
392023-2024
Proometniques
Inverser une liste avec la méthode reverse()
(On peut inverser une liste avec la méthode reverse()
-reverse()
ge eee
[21, 19, 17, 1
>> A.reverse()
Créer une nouvelle liste qui est inverse d'une liste existante
(On utilise pour cela reversed(A) dans une liste créée en compréhension, reversed(A) étant
Vitérable,
>>> print (6)
(21, 19, 17, 15, 13, 1, % 11, 3, 1, 9 1, 1
9) Trier une liste
Comme pour reverse et reversed précédemment, on a la méthode A.sort() qui modifie la liste
Aexistante, et sorted(a) qui « créée » une nouvelle liste trie.
Trier dans l’ordre croissant avec sorted(A)
[i for i in sorted(a))
print (I)
1, 1, 1, 1, 3, 9 9% 11, 13,
A)
Copyright © Pragmathiques 2023,
402023-2024
Frogmathiques
Lest la liste avec les valeurs de A triées dans l'ordre croissant. On voit que la liste A n'est pas
modifiée.
Trier dans l’ordre croissant avec A.sort()
Avant de trier A, je la copie dans une nouvelle liste.
Py)
>>> print (i)
G, 1, 9% 1, 3, 11, 9 4, 13, 15, 17, 19, 21)
>>> A.sort ()
>>> print (A)
1, ds 1, ly 3, 9% 9, 21, 13, 15, 17, 19, 22]
Ici a liste A est modifiée.
Trier dans ordre décroissant avec sorted(H, reverse=True)
sorted(H, revers:
>>> print (J)
21, 19, 17, 18, 13, 11, % 9% 3, 1, 1, dy Ud
>>> print (H)
fea aS eel
1, 9, 1, 13, 15, 17, 19, 21)
La liste Jest la liste H triée dans l'ordre décroissant, mais Ia liste H n’est pas modifiée.
Trier dans ordre décroissant avec H.sort(reverse=True)
>>> H.sort (revers:
>>> print (H)
(21, 19, 17, 15, 1
11, 9 9, 3, 1, 1, 1, 11
Copyright © Pragmathiques 2023,
a2023-2024
Fogmathquer
10) Permutation
Doo Ae
ld, 1, 1, 3, 9, 9, 11, 13, 15, 17, 19, 21
Si je veux permuter le 3 et le 19, je peux e faire de deux fagons,
Le 3 est en 5** position donc a "index 4
Le 19 est en avant derniére position, donc & index -2.
‘On procéde comme ga :
>>> AL4],Al-2]=A(-2],AL4]
>>> print (A)
(1, 1, 1, 1, 19, 9 9, 11, 13, 15, 17, 3, 211
‘On peut aussi le faire en deux temps, mais il faut alors avoir recours 8 une variable auxiliaire.
aux~A[-2]
>>> A[-2]=AL4]
>>> ALA]
>>> print (a)
(Bp ao
19, 9, 9, 11, 13, 15, 17, 3, 21)
Copyright © Pragmathiques 2023
a2023-2024
Progmathiquer
D] Les boucles if, for et while : introduction
Ceci est une petite introduction sur les boucles, On verra plusieurs exercces parla suit.
1) Les boucles if
Jer cas : if sans else
Comme pour la fonction def, il faut indenter pour montrer quand s'arréte la boucle,
Ici la boucle est exécutée sila condition donne true.
>>> if w=0
rint ("La racine de x est :", x#*0.5)
La racine de x est : 3.0
On voit que le else est indenté au méme niveau que le if.
>>> x=-7
>>> if >
print ("La racine de x est : ", x#*0.5)
+ else
print ("Il n'y a pas d
nty a pas de racine
3° cas : if elif else
Prenons cette fonction
Copyright © Pragmathiques 2023
“a2023-2024
Progmathiques
3x41 six<—5
F(x) = {2x47 si-S< xs 12
12x six> 12
On peut utiliser elif else
>e> def f(x):
valeur = 24x+7
else :
valeur =12*x
return valeur
>>> print (£(-8))
-23
>>> print (£(0))
7
>>> print (£(20))
240
‘On peut également utiliser elif dans les deux derniers (mais dans ce cas la on précise x > 12).
>e> def £(x):
valeur = 2*x+7
wo12
valeur =12¥x
return valeur
>>> print (£(-8)}
-23
>>> print (£(0))
>>> print (£(20))
240
Copyright © Pragmathiques 2023
4aProgmathiques
On aurait également pu utiliser une boucle if dans la boucle if aprés le else.
valeu:
return valeur
>>> print (£(-8))
-23
>>> print (£(0))
>>> print (£(20))
240
La fonction qui permet de calculer la valeur approchée d’un nombre
Pour avoir une valeur approchée a 'entier prés.
>>> def Arrondi (x)
if x - int(x) < 0.5:
appro = int (x)
else :
appro = int (x) + 1
return appro
>>> Bs
rrondi (7.5)
>>> print (A)
>>> Arrondi (3.7598)
Pour avoir une valeur approchée avec n nombres aprés la virgule
2023-2024
Copyright © Pragmathiques 2023
452023-2024
>>> def Arrondivirgule(x,n) +
oso xex* (10**n)
ac yeArrondi (x)
yey/(10**n)
or return y
>>> Arrondivirgule (3.7596, 2)
3.76
>>> Arrondivirgule(3.7596,1)
3.8
>>> Arrondivirgule (3.7596, 3)
3.76
Copyright © Pragmathiques 20232) Initiation aux boucles for
La boucle for kin A répate les instructions indentées pour chaque élément k d’une liste A.
Boucle for avec la valeur de k qui n‘a pas d’influence
La boucle suivante affiche 4 fois Kamehameha
>>> for k in range(1,5):
print ("Kamehameha")
Kamehameha
Kamehameha
Kamehameha
Kamehameha
Boucle for avec la valeur de k quia une influence
On veut afficher les 5 premiéres valeurs de la suite (tty) ncn définie par
YnEN, wy=3nt1
>>> for k in range(0,5)
print ("u",k," 3*ktL)
(On peut également les conserver dans une liste U.
On crée une liste vide et on I'incrémente au fur et & mesure les valeurs trouvées dans la
boucle for,
2023-2024
Copyright © Pragmathiques 2023,
a7in range (0,
append (3*k+1)
13)
(On verra plus tard le cas des suites définies par hérédité.
(On verra également que l'on peut conserver les valeurs dans un tableau,
3) Initiation aux boucles while
La boucle while répéte les instructions indentées tant que la condition est réalisée.
On reprend a suite (14,) xen définie par :
YnEN, t=
n+ 1
Cette fois, on veut le premier entier m tel que u, > 5000
On a uo qui vaut 1 et la suite est croissante.
La boucle while consiste ici a partir de n = 0, d’augmenter 8 chaque fois la valeur den d'une
unité jusqu’a ce qu‘on obtienne u,, > 5000.
Tant que u,, < 5000, on continue d’inerémenter.
>>> while 3*n+1<=5000
nent1
print (n
1667
tyeos = 4999, Une?
002,
(On verra les cas avec les suites définies par hérédité dans un autre chapitre.
2023-2024
Copyright © Pragmathiques 2023
482023-2024
Progmathiques
II] MATRICES : PREMIERES NOTIONS
Dans ce Il, les données sont rentrées dans Shell
0) Importation de la bibliotheque Numpy
‘Avant toute chose dans le programme, pour utiliser les matrices, il faut avoir recours a la
bibliotheque numpy.
Pour utiliser dans notre programme, i faut d’abord importer la bibliotheque.
i existe trois grandes fagons de importer.
Import numpy
La premiere est de 'appeler avec
>>> import numpy
‘Avec cet appel, & chaque fois par exemple qu'on aura recours a array (une fonction pour créer
des matrices), on devra le précéder de numpy.
ray ({1,2,3]
31
from numpy import *
La seconde facon est de 'appeler avec
from numpy import
Cette méthode importe toutes les fonctions de numpy dans I'espace. On n’a pas besoin de
faire précéder de numpy ces fonctions.
Copyright © Pragmathiques 2023 492023-2024
Pragmatiqves
Cependant, comme dit dans la partie précédente, cette méthode est peu utllisée car plusieurs
fonctions de Numpy ont le méme nom que des fonctions d'autres bibliothéques.
import numpy as np
La méthode la plus courante (et celle qui est privilégiée dans le programme officiel) est
ort numpy as
‘Avec cette importation, pour utiliser les fonctions, on a juste besoin de les faire précéder de
np.
Par exemple
np.array({1,2/3])
array([1, 2, 31)
1) Conception de matrices
Créations de matrices de facon explicite avec np.array
‘On commence le programme par :
>>> import numpy as np
Pour construire une matrice de fagon explicite, on ut
{a fonction np.array()
‘On encadre toute la matrice de crochets []
CChaque ligne est entre crachets [] et les coefficients sont séparés par des virgules.
Pour changer de ligne dans la matrice, on met une virgule aprés le crochet | et on ouvre un.
autre crochet [.
La matrice ligne a un statut spécial qui lui permet de ne pas forcément avoir les crochets qui
encadrent la matrice. Mais je te consellle de les mettre quand méme car sinon c'est considéré
comme un vecteur.
Quand on appelle la variable dans Shell, elle nous envoie la matrice sous le format array.
Pour afficher la matrice « sous le format que lon écrit », on utilise la fonction print.
Copyright © Pragmathiques 2023s.
7
ceo onventsmarenA=(i 2 a8=(is)erc=(
2
>>> Aenp.array([1,2,3])
>>> A
array({1, 2, 3))
>>> print (A)
‘Mais on peut aussi écrire
np. array({({1,2,3}])
>>> A
array({{1, 2, 3]])
>>> print (A)
(1 20377
Cette forme est préférable (cf chapitre sur les transposée)
En revanche, pour B et C, on n’a qu’une possibilité
>>> Benp.array({(7], [15], (2]])
>>> print (B)
7
5)
120
>>> Cenp. array ({11,3,4/3], [716,52], [1,4,8,31])
ay([[l, 3, 4, 31,
(7, 6 5, 21,
O, 4, 8, 331)
>>> print (Cc)
[3437
(7652)
483)
Remarque
Sion veut mettre e ou 1 dans une matrice on écrira np.e ou np.pi.
soe
one
2023-2024
Copyright © Pragmathiques 2023
si2023-2024
Les matrices np.ones, np.zeros et np.eye
(On commence le programme par
import numpy as np
La commande np. ones () erée des matrices avec que des 1. La commande np. zeros ()
crée des matrices avec uniquement des 0.
Quand il n'y a qu'un nombre dans la parenthése, c'est une matrice ligne,
Quand ily a deux nombres, c’est une matrice rectangulaire avec le premier nombre qui est le
nombre de lignes et le second, le nombre de colonnes. Attention 3 I'écriture, les deux
nombres sont dans une nouvelle parenthése (il y a donc deux parenthases, sinon ily a un
message d’erreur).
>>> Ul=np.ones (5)
>>> Ul
array, (Osseo eel oemel |
>>> print (U1)
angel ogee Teneo
p-ones ( (1,5)
>>> print (U2)
feast
>>> Usnp.ones ((3,4))
>>> print (U)
CLeedenloedn
fea ay
[deeded ed
>>> 1p. zeros (4)
>>> print (01)
[0. 0. 0. 0.)
>>> O=np. zeros ((4,2)
>>> print (0)
((0. 0.
(0. 0
0. 0
9.
Copyright © Pragmathiques 2023,
s2>>> 0:
1p zeros ( (1, 4))
>>> print (02)
[f0, 0. 0. 0.9)
La commande np. eye () erée des matrices identités. Le premier nombre entre parentheses,
est le nombre de lignes, le second est le nombre de colonnes. Ici iln'y a qu’une seule
parenthése.
Attention au cas de la matrice D2.
>>> Denp.eye(4,4)
>>> D
array({({1., 0., Oo,
(ee thon Con
[er Org ter
(og Che! Wao
>>> print (
([1. 0. 0. 0. 0.)
(0. 1.0 0.1
[0. 0. 1. 0. 0.11
Le cas D2 nous montre que quand la matrice n’est pas carrée, elle est quand méme créée.
Dans ce cas, les éléments a,, valent 1 et les autres valent 0.
Copright © Pragmathiques 2023
2023-2024
532023-2024
Progmothiques
2) Extraction et modifications d’éléments d’une matrice
5 2]
831)
On commence le programme par
>>> import numpy as np
Extraction et modification des coefficients d’une matrice
Dans Python, les index de lignes et de colonnes commencent 8 0.
Ainsi a premiére ligne est index 0 et la premiére colonne est index 0
Ainsi, C (0,1) est le coefficient de index 0 en ligne et 1 en colonne et donc le coefficient de
la 1° ligne et 2 colonne,
Cli, j] est le coefficient de ta (i + 1)'"* ligne et de ta (j + 1)" colonne de C,
(On peut ainsi extraire (donc faire apparaitre) le coefficient d'une matrice.
On peut également modifier un coefficient d'une matrice. Par exemple, C[1,0]=87 signifie :
JFaffecte 87 au coefficient de Ia ligne 2 et colonne 1 de la matrice C.
>>> print (C(0,0])
>>> print (C[1,0])
>>> C[1,0}=87
> print (Ct
0)
Copyright © Pragmathiques 2023,Progmathiques
>>> print (C)
ile a A
(87 6 5 2)
[1 4 8 3]
Extraction et modification de lignes
(1, +] signifie « 2° ligne de C » (puisque I’index 1 correspond a la ligne 2).
CLL, +) permet d'extraire la 2° ligne de C.
CL1, +] =1 signifie 'affecte la matrice L ala 2** ligne de C. Cette commande permet de
‘modifier la 2 ligne de C et de la remplacer par la matrice L.
On peut également rentrer directement une matrice aprés le signe =
>>> print (C{1.
876 5 2)
array ([{1,32, 30,4011)
>>> print (L)
[{ 1 32 30 401)
>>> CLL, :]=b
>>> print (C)
tt2 a3]
{1 32 30 40)
(1 4 8 3)
>>> Cll, :]=np.array({{ 1, 32, 30, 75]])
>>> print (C)
(1 3 4 3)
32 30 75]
cil 438 3i)
2023-2024
Copyright © Pragmathiques 2023
552023-2024
Extraction et modification de colonnes
2) signifie 3** colonne de C (oul, encore indexation),
+2] permet d’extraire la 3** colonne de C. Cependant elle est renvoyée sous forme de
vecteur ligne.
Pour renvoyer sous forme de colonne la 3*”* colonne de C, on 6
>>> print (C[:,2])
>>> print (C
t4)
(30)
ten
(21)
Pour modifier une colonne et la remplacer par une autre, II faut utiliser a 2""* notation (car
Python consi
re C[ :, 2] comme une matrice (3,1) et donc ne peut pas la remplacer par
une matrice colonne (1,3) }.
>>> Nenp.array({{90], [91], [92]])
>>> print (N)
(90)
91)
19211
(2)
nt (C)
([1 390 3)
[1 32 91 75
[1 492 3))
Et de méme pour changer la premiére colonne sans créer une matrice au préalable :
>>> Clr, [0]
sarray({(21], [22], (231])
>>> print (C)
[121 3.90 3)
[22 32 91 75)
[23 492 31)
Copyright © Progmathiques 2023
562023-2024
Extraction et modification d’une sous-matrice
Cl{arb,c:d}) extrait une sous-matrice de la matrice C.
La pattie a:b correspond aux lignes sélectionnées. Comme pour range, le deuxiéme nombre
représente un obstacle (ou un intervalle ouvert). On extrait done les lignes entre I'index a et
index b-1. Done entre la a#12me ligne et la b*™* ligne.
La pattie c:d est la méme chose mais pour les colonnes.
Ainsi, (1:2, 1:2] extrait une sous-matrice de la matrice C délimitée entre la ligne 1 + 1 et
la ligne 2 et la colonne 1+ 1 et la colonne 2. En fait, on extrait qu'un seul coefficient : le
coefficient de la 2°" ligne et 2°" colonne.
ct1:3,
3] extrait une sous-matrice de la matrice C en prenant les 2°" et 3° lignes et
les 2ames et 3° colonnes.
>>>
array([[21, 3, 90, 3],
32, 91, 75),
4, 92, 33)
>>> D=C {122,112
>>> print (D)
(1321)
>>> print (E)
[32 91]
>>> print(C[1:3,1:4])
[32 91 75]
[492 31
Quand on ne met pas le nombre avant le :, cela signifi qu’on prend le tout premier index.
(done 0) et quand on ne met pas de nombre apres le : cela signifie qu’on prend le tout dernier
index
a justfie le fait que = signifie que t'on prenne toute la ligne ou toute la colonne.
>>> print (C[1,#])
[21 3.90 3))
Copyright © Pragmathiques 2023, 37'ci, on prend les lignes entre index 0 et 'index 1-1, done, la premigre ligne. Pour les.
colonnes, on prend les 4
'ci, on prend les lignes entre index 0 et index 2-1, donc les lignes 1 et 2. On prend toutes les,
colonnes,
> print (Cli,
[f 390 3)
(32 91 75)
92 31]
Ici, on prend toutes les lignes et on prend les colonnes entre lindex 1 et les suivantes, done
les colonnes 2.8 4.
2023-2024
© Pragmathiques 2023,
582023-2024
FProgmathiques
Exercices
‘aprés ECE EDHEC 2015 Exercice 1
a) Créer la matrice Z a l'aide de la commande np.ones et de boucles for et afficher.
bb) Créer la matrice Z 8 l'aide de np.zeros et de boucles for et I'afficher.
€) Créer la matrice Z a I'aide de np.ones et d’une modification avec np.zeras et l'afficher.
Rappel.
Attention, la premiére ligne est indexée a 0 et la premiere colonne également.
Quand on ne met que deux nombres dans range, le pas par défaut est 1. Le dernier nombre
est 'obstacle donc on s‘arréte a I'entier précédent.
a)
> 2=np-ones((5,5))
for i in range(1,4):
for j in range (1,5):
,j)-2
>>> print (2)
Copyright © Pragmathiques 2023
59b)
>>> Zenp. zeros ((5,5))
>>> for j in range(0,5):
Bog 2(0,4]=1
Ears 2(4,3]-2
>>> for i in range(1,4):
is 2{i,0]=1
>>> print (2)
[dee ete]
(1. 0. 0. 0. 0.)
(1. 0. 0. 0. 0.)
[1. 0. 0. 0. 0.)
Gea aa. 1a
¢
>>> Zenp.ones ((5,5))
>>> Z{1:4,1:5]=np. zeros ( (3, 4))
>>> print (2)
dee eel et)
I. 0. 0. 0. 07
[1.0 0. 0, 0.7
[1. 0. 0. 0. 0.7
[aeeueieeeaees
2023-2024
Copyright © Pragmathiques 2023
602023-2024
Progmatniques
Création d’une fonction qui donne une matrice
Créer une fonction nommée Matrice qui pour une valeur de p renvole cette matrice
0
>>> def Matrice(p) +
=np. zeros ((6,6))
(1:6, 0:5]=np-eye (5,5) *P
Q{0, 0]=p
Q[:, 5]=np.ones (6) *(1-p)
return Q
>>> Matrice(0.4
array([[0.4, 0. , 0.» 0. + 0. » 0.6],
10.4, 0. , 0. , 0.» 0. + 0.61,
10. , 0.4, 0. , 0. + 0. + 0.6),
[0. , 0. , 0.4, 0. , 0. » 0.61,
[0. , 0. , 0. , 0-4, 0. 0-6),
[0., 0. , 0. , 0. , 0-4 0.611)
extrait une sous-matrice 1 :6 signifie qu'on prend les
‘Attention aux indices :Q[1:6, 0
lignes entre index 1 et index 6 (ce dernier étant non inclus}, donc on prend entre I'index 1
et index inclus, c'est-&-dire entre la ligne 2 et la ligne 6,
De méme, 0:5 signifie qu’on prend les colonnes entre 'index 0 et lindex 4, cest-a-dire entre
la.1°* colonne et la S*"* colonne.
Copyright © Pragmathiques 2023 61Frogmathique
3) Créations spécifiques de vecteurs lignes
Le vecteur ligne avec np.arange
(On commence le programme par :
>>> import numpy as np
Le commande np.arange(4.o,p) fonctionne comme range.
Elle créer un vecteur ligne sur intervalle ouvert [a, bf avec un pas de p.
Sauf qu‘icia et b ne sont pas forcément des entiers.
np.arange(-2, 16,2)
>>> print (A)
8 10 12 14)
>>> A=np.arange(1.7,
pi, 0.1)
> print (A)
[1.7.1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5 2.6 2.7
Sree
Lorsque le 3° nombre n’est pas présent, le pas par défaut est 1.
>>> Asnp.arange (5,19)
> print (A)
6 7 8 91011 12 13 14 15 16 17 18)
Le pas peut étre négatif.
>>> Aenp.arange(3,-10,-2)
>>> print (A)
3.1- 7-9)
Si la matrice ne peut pas étre créée, alors c'est une matrice vide [] (que 'on pourrait,
concaténer avec des fonctions hors programme comme np.concatenate ou np.vstack)
2023-2024
Copyright © Pragmathiques 2023,
22023-2024
np .arange (0,100
>>> print (A)
arange(3,-8)
>>> print (A)
(On commence le programme par
import numpy as np
Les 3 nombres de instruction np.linspace(d,a,NTe) correspondent &
Le réel d pour la valeur de départ.
Le réel a pour la valeur d’arrivée,
L’entier NT pour le nombre de termes.
Le nombre d’arrivée est ic la valeur exacte (contrairement np.arange).
genp. Linspace (3, 10, 29) signifie que l'on crée un vecteur-ligne dont le premier terme
est 3, le dernier terme est 10 et le nombre de termes est 29.
Icila valeur finale est atteinte quoiqu'il arrive.
Le pas est un pas calculé par Python pour que chaque terme augmente avec la méme valeur.
On obtient ici 28 segments de méme longueur.
>>> genp. Linspace(3, 10,29)
>>> print (g)
[3.3.25 5 5.25
5.5 5.75 7.5 7.75 8
8.25
Pourquoi la raison est-elle de 0,25 ?
Chaque terme augmente de la méme valeur. On a une suite arithmétique de 1° terme 3
Et de 29°" terme 10.
(On se souvient de la formule : uy = tt + 28 Xr. La raison est done
Copyright © Pragmathiques 2023, 63y 2023-2024
Progmathiqu
~ 38
0.25
On a donc cré¢ ici les 29 premiers termes de la suite arithmétique de premier terme 3 et de
raison 0,25.
Et done dans le cas général
dernier terme — premier terme
nombre de termes — 1
Quand on écrit np.tinspace(-4,5,19), est-ce que O est contenu dans les coefficients ? Si
oui, & quelle place ?
Onaalors
Supposons qu'il existe n € [1,19] tel que ty,
Un = Uy + (n—1) Xr
0, done
1
O=-44(n-I) x5
4x2
Copyright © Pragmathiques 2023 64Synthase
1
w= 449-1) xz=0
Done
Oest contenu dans linspacel-4,5,19), et son coefficient est le 9
Remarque
Ona
Linspace (-4,5,19))
“2.5 -2, -1.5
3.5 4.0 445
4) Calcul entre les matrices
Les opérations coefficient par coefficient
Les opérations 4°A, A+, A+B, A~B, A*B, A/B et A**B sont des opérations qui se font
coefficient par coefficient.
‘On obtient ici les matrices : (A x a,j), (a,j + A), (@),) + Bi), (iy — Buys (iy X Bis)
>>> import numpy as np
Aenp.array({[1/2,3], [4,5, 6], (7/8,91])
print (a)
(1 2 3
[45 6)
17891)
*np.ones (
print (B)
(110. 10, 10.]
(10. 10. 10.)
[10. 10. 10.)
2023-2024
Copyright © Pragmathiques 2023,
652023-2024
Progmathiques
>>> print (A+1)
(23 4)
[5 6 7]
[8 9103)
>>> print (A¢mp. ones ((3,3)})
Ir2. 3. 441
15. 6. 7)
18. 9, 10.11
>>> print (A+5)
116 7 a
{910 11)
(22 13 141]
>>> print (A+B)
(42. 12. 13.1
(14, 15. 16.1
(17, 18. 19.3)
>>> print (A~B)
[[-9. -8. -76
[-6. -5. -4.)
[-3. -2. -1.11
>>> print (A*B)
[[10. 20. 30.)
[40. 50. 60.)
170. 80. 90.1)
>>> print (A/B)
(0.1 0.2 0.3)
[0.4 0.5 0.6)
[0.7 0.8 0.91)
>>> print (A**B)
[{1.00000000e+00 1.02400000e+03 5.90490000e+04)
[1.04857600e+06 9.76562500e+06 6.04661760e+07]
[2.82475249e+08 1.07374182e+09 3.48678440¢+09) }
Copyright © Pragmathiques 2023, 66d 2023-2024
Proamatncues
Pour mettre une matrice & une puissance négative, il faut que les valeurs dans la matrice
soient de type float et non de type int.
>>> print (A**-1)
Traceb:
(most recent call las’
File "cpyshell#13>", line 1, in
print (A**-1)
ValueError: Integers to negative integer powers are not
allowed.
Pour se faire on a deux solutions :
La premiere est de rentrer « 8 la main » sous forme float en mettant des . aprés chaque
valeur.
>>> Aenp-array(((1.,2-,3-]1 [dey
18.9-]))
>>> print (A)
(aenzeesn)
4. 5. 6
[7, 8. 9.)
>>> print (A**-1)
a. 0.5 033333333)
0.25 0.2 0.16666667
(0.14285714 0.125 0.11111111)1
La seconde est une idée que fai eue en regardant un résultat plus haut. Tu remarques que
quand j'ai fait A/8, es résultats étaient en float. Qu’en esti sion divise par une matrice avec
uniquement des 1?
>>> Renp.array({(1/2, 3], (4,5, 6], (7/8/91)
>>> print (A)
(23)
{45 6)
[78 91)
>>> AeA/np.ones((1,1))
Copyright © Pragmathiques 2023 o7>>> print (A)
ittee2 ese
ua.
>>> print (A**-1)
a 0.5 0.33333333]
(0.25 0.2 0.16666667]
(0.14285714 0.125 0.111121111)
Eh oui, la division a transformé les entiers en float et 1a on peut faire la puissance -1 (qui je le
rappel permet oben non pas inverse dela matic, masa marie (+)
On aurait également pu diviser par 1
>>> Aenp.array([{1,2,3], (4,5, 6], 7,8, 911}
>>> print (A)
(1 23)
456
(7.8 9)
>>> APB/1
>>> print (A)
alee a
U4. 5. 6.)
I. 8. 9.)
>>> print (A**-1)
a. 0.5 0. 333333331
[0.25 0.2 0.166666671
[0.14285714 0.125 0.111121111))
Evidemment, situ utilises cette méthode, détaille bien et explique bien ce que tu fais !
2023-2024
Copyright © Pragmathiques 2023,
6aExercice
Utiliser np.ones et np.eye pour créer une matrice.
24 4
Dineramatice(4) <0. 4 Jaen ons tee
194
>>> A=d*np.ones ( (3, 3) }-12*np. eye (3, 3)
>>> print (A)
[I-8. 4. 4)
[4,-8.0 44)
4,-8.1)
Le produit de matrices AB
\Vu que A*B ne donne pas le produit AB, i
faut une opération pour le calculer. C'est
Vinstruction np .dot (A,B).
existe également une instruction A. cot (B) mais celle-ci est « non exigible » dans le
programme officiel.
import numpy as np
>>> Aenp.array({[1,2,3]-[4,5, 6], (7/8, 9}])
B-10*np. ones ((3,3))
y (L183, 340 4] (3,3, 5451, 1,142,211)
cenp.a
>>> print (np.dot (A,B) )
[1 60. 60. 60.)
1150, 150. 150.]
[240. 240. 240.1)
Pour calculer le produit A x B x C, on peut procéder de deux faons.
‘On crée une matrice intermédiaire
>>> Denp.dot (A,B)
>>> print (np.dot (D,C))
({ 420. 420. 480. 660.)
[1050. 1050. 1200. 1650.]
[1680. 1680. 1920. 2640.1]
2023-2024
Copyright © Pragmathiques 2023
cyOu on fait tout sur une seule ligne.
>>> print (np. dot (np.dot (A,B) ,C))
[ 420. 420. 480. 660.)
[1050. 1050. 1200. 1650.)
[1680. 1680. 1920. 2640.1)
On remarque que le np.dot(8,C) est tout simplement le résultat du produit de BC (done la
matrice BC)
(On aurait évidemment pu faire dans Vautre ordre :
>>> Denp.dot (B,C)
print (np.dot (A,D))
660.)
1200. 1650.)
[{ 420. 420. 48
050. 1051
(1680. 1680. 1920. 2640.))
‘Quen une ligne dans autre ordre
print (np.dot (A,np.dot (B,C)))
420. 420. 480. 660.1
50. 1050. 1200, 1650.
(1680. 1680. 1920. 2640.)}
5) Inverse et transposée d’une matrice
on ase amare = (4 8)
Inverse d'une matrice avec la bibliotheque numpy.linalg
La bibliotheque numpy. 1 Analg est la bibliothéque liée a I'algebre linéaire.
On a deux fonctions dans cette bibliothéque pour calculer Inverse d'une matrice.
2023-2024
Copyright © Pragmathiques 2023,
70La premigre est np. Linalg. inv (D) et la seconde est np. linalg.matrix_power (D,~1)
La seconde fonction permet de calculer la puissance dune matrice.
np. linalg.matrix_power(D, 3) caleule done D?
>>> import numpy as np
>>> Denp-array({(1,6], (2,711)
>>> print (D)
(f1 6]
271
>>> As
1p. Linalg. inv (D)
>>> print (Al
[[-1.4 1.2)
[0.4 -0.21)
>>> Aenp.linalg.matrix_power(D,-1)
>>> print (A)
“1.40 1.2)
[0.4 -0.2)]
>>> Aenp.linalg.matrix_power(D, 3)
>>> print (A)
[1109 414)
[138 523))
(On peut également importer la bibliotheque numpy.linalg ce qui nous permet d’écrire une
forme abrégée de la fonction.
>>> import numpy as np
>>> import numpy.linalg as al
>>> De
p-array(({1, 6], [2,71])
>>> print (D)
ttl 6]
271
>>> Eeal.inv(D)
>>> print (E)
[[-1.4 1.21
[0.4 -0.21)
2023-2024
Copyright © Pragmathiques 2023,
n2023-2024
fie iol
>>> Eeal.matrix_power (D,~1)
>>> print (E)
(i-1.4 2.2]
[0.4 -0.29)
>>> Exal.matrix power (D, 3)
>>> print (E)
[t109 414)
(138 523))
Evidemment, sila matrice n’est pas inversible, ca ne marche pas.
148
Sionprendn= (14 8
).ona 14 x 1221 +8 = 0 dona matrie nes pas invest
>>> Rei
p-array({{14,8], [21,12]])
>>> print (R)
(i148)
[21 121
>>> Feal.inv(R)
Traceback (most recent call last):
“", line 1, in
Feal.inv(R)
File array function internals>", line 200, in inv
numpy.linalg.LinAlgError: Singular matrix
Transposée
Pour calculer la transposée d’une matrice A, on écrit instruction np. transpose (A)
Remarque :la méthode A. transpose () est « non-exigible » dans le programme.
>>> import numpy as np
>>> Al=np.array((1,2,3])
>>> A2enp.array({[1,2,3]])
>>> Benp.array({(7], [15], (21)
>>> Cenp.array([[1, 3,4, 3], [76,54 2]¢ (1, 4/8,3)])
Copyright © Pragmathiques 2023 nfrogmatiu.
>>> print (Al)
23)
>>> print (A2)
ti 2317
>>> print (B)
7
(5)
Lay
>>> print (C)
[11 3.43)
(7652)
(14831)
>>> print (np. transpose (Al) }
(23)
>>> print (np. transpose (A2) }
ct
2
3)
>>> print (np. transpose (B))
1745 2)
>>>. Fenp. transpose (C)
>>> print (F)
ta74)
13.6 4]
[45 8)
(3.2311
(On remarque que la matrice A1 n‘est pas véritablement transposée, car en réalité comme il
n'y a pas le double crochet, elle n’a pas le statut de matrice, mais de vecteur. C’est pourquoi
je disais précédemment de préférer ’écriture du double crochet pour la matrice ligne
2023-2024
Copyright © Pragmathiques 2023
B2023-2024
roamatiqves
6) Matrices et fonctions 1° partie
Cas général
Lorsque I'on applique une fonction f répertoriée dans la bibliothéque numpy & une matrice
(aij), ,0n obtient une matrice de méme taille ou chaque coefficient est f(a,)), Cest-&-
lamatrice (/(a)),,
>>> import numpy as np
>>> Cenp.array([(1,3,-4], (7.5, 6.8, 2], [-1,-4,-8.3]]}
>>> print (C)
>> print (np-exp(C) }
[12.71828183e+00 2.00855369e+01 1.83156389e-02)
[1808042410403 8.97847292e+02 7.38905610e+00)
[3.67879441e-01 1.83156389e-02 2.48516827e-04)}
>>> print (np. abs (C))
Il. 3. 4.)
(7.5 6.8 2. ]
4.8.31]
>>> print (np. log (np.abs(C)))
[t0. 1,09861229 1.38629436]
[2.01490302 1,91692261 0.69314718]
0. 1.38629436 2.11625551]}
>>> print (np.sart (np.abs(C)})
ta. 1.73205081 2. 1
[2.13861279 2.60768096 1.41421356]
fae an 2.88097206]]
>>> print (np. floor (C)}
tt 1.
(7. 6 24
(-1. 4. -9.1)
Copyrient © Pragmathiques 2023,
™[as jhe e
Et pour les maths approfondies (jai la flemme de faire deux docs pour le Il] © )
array([(np.pi,np.pi/2], [-np-pi,np-pi/3}]}
>>> print (A)
({ 3.14159265 1.57079633]
[-3.14159265 1.04719755})
>>> print (np.sin(A))
[{ 1.22464680e-16 1.00000000e+00}
[-1.22464680e-16 8. 66025404e-01)}
>>> print (np.cos (A) )
[{-1.000000e+00 6.123234e-17]
[-1.000000e+00 5.000000e-01)1
>>> print (np.tan(A))
[[-1.22464680e-16 1.63312394e+16)
[ 1.22464680e-16 1.73205081e+00]]
La fonction np.shape
La fonction np.shape() renvoie une matrice a une ligne et deux colonnes.
Le premier coefficient est le nombre de lignes de la matrice & laquelle on affecte la fonction et
le deuxiéme coefficient est le nombre de colonnes.
>>> Cenp.array([{1,3,4, 31, (7,675.2), (14/8/31)
>>> print (C)
(11.343)
(7652)
(14833)
>>> Denp. shape (C}
>>> print (D)
(3, 4)
‘On peut également attribuer ces valeurs & des variables (ce qui permet d’avoir le nombre
total de coefficients en les multipliant)
Copyright © Pragmathiques 2023
2023-2024
a2023-2024
>>> a, b=np. shape (C)
>>> print (a)
>>> print (b)
4
>>> print ("La matrice posséde",a*b, "coefficients")
La matrice posséde 12 coefficients
Les fonctions np.min, np.max, np.mean, np.var et np.std
La fonction np . nin donne le coefficient minimum d'une matric.
La fonction np .max donne le coefficient maximum d'une matric.
La fonction np .mean donne la moyenne de tous les coefficients d’une mattice.
La fonction np..medtian donne la médiane de tous les coefficients d'une matrice.
La fonction np . var donne la variance de tous les coefficients d'une matric.
La fonction np . std donne Iécart-type de tous les coefficients d’une matrice,
>>> import numpy as np
>>> Renp.array([{1,5,7], (8,3, 4], (2,9, 6]]}
>>> print (A)
(157)
[834
2
611
>>> print (np.min(A))
>>> print (np.max(A))
print (np.mean(A))
print (np.median{A))
>>> print (mp. var(A))
6. 666666666666667
>>> print (np.std(A))
2.981988997471611
Copyright © Pragmathiques 2023,
76Progmathiques
La fonction no.min (A, 0) renvoie un vecteur dont les composantes sont les minimums de
chaque colonne de A.
La fonction n
-min (A, 1) renvoie un vecteur dont les composantes sont les minimums de
chaque ligne de A.
>>> print (np.min(A,0))
34)
>>> print (np.min(A, 1))
132)
On a le méme procédé avec np.max(A,0) et np.max(A,1)
>>> print (np.max (A, 0))
(897)
>>> print (np.max(A, 1) )
(78 9)
La function np.mean (A, 0) renvole un vecteur dont les composantes sont la moyenne de
chaque colonne de A.
La fonction np.mean (A, 1) renvoie un vecteur dont les composantes sont la moyenne de
chaque ligne de A.
>>> Benp.mean (A, 0)
>>> print (B)
(3, 66666667 5. 66666667 5.66666667)
>>> print (np.mean(A,1))
a.
5. 66666667]
On a le méme procédé pour np.median(A,0), np.median(A,1), np.var(A, 0),
np. var (A,1),np.std(A, 0) etnp.std(A, 1).
>>> print (np.median (A, 0) }
(2.5. 6.1
>>> print (np.median (A, 1))
[5. 4. 6.)
>>> print (np. var (A, 0))
[9.55555556 6.22222222 1.55555556]
2023-2024
Copyright © Pragmathiques 2023
7Progmathiques
>>> print (np. var (A,1))
[6.22222222 4. 66666667 8.22222222]
> print (np.std(A,0))
3.09120617 2.49443826 1.24721913)
>>> print (np.std(A,1))
(2.49443826 2.1602469 2.86744176)
Les fonctions np.sum et np.prod
(Les fonctions np . prod ne sont pas au programme, mais je les mets car je me dis qu’on peut
te les donner en exercice en te les définissant).
La fonction np. sum donne la somme de tous les coefficients d'une matrice.
La fonction np. prod donne le produit de tous les coefficients d'une matrice.
>>> import numpy as np
>>> Aenp-array({(1,5,7], (8,3, 4], [2,9,6)]]
(np. sum(A))
>>> print (np.prod(A))
362880
La fonction np. sum (A, 0) renvole un vecteur dont les composantes sont la somme de
chaque colonne de A
La fonction np. sum (A, 1) renvole un vecteur dont les composantes sont la somme de
chaque ligne de A
On ale mame procédé avec np. prod.
>>> print (np.sum(A,0))
(11 17:17)
>>> print (np.sum(A,1))
(13 15 17)
print (np.prod(A,0))
16 135 168)
2023-2024
Copyright © Pragmathiques 2023
aprint (np.prod(A,1))
35 96 108)
Remarque :
>>> np.prod (np. shape (A) )
a nous donne le nombre de coefficients d'une matrice,
Les fonctions np.cumsum et np.cumprod
La fonetion np . cums um (A) donne un vecteur dont les composantes sont la somme.
cumulée des coefficients de la matrice A. Le sens est de gauche a droite, puis on passe a la
ligne suivante.
>>> import numpy as np
>>> Renp.array(({1,5,7], (8,3, 41, (2,9,6}])
[2.9 61)
>>> print (np. cumsum(A))
[1 6 13 21 24 28 30 39 45)
Le premier coefficient est 1, puis 1+ 5 = 6, puis 1+5+7=13, puis +5+7+8=
ete.
Lacommande np.
smsum (A, 0) renvoie une matrice dont chaque colonne est la somme
‘cumulée des coefficients (on « repart 8 0 » & chaque nouvelle colonne}.
Dans l'exemple suivant les coefficients de la premiére colonne sont : 1, 1 + 8 =
148-42 =11. Eton repart 80 avec la 2*"* colonne.
>>> Benp. cumsum (A, 0)
>>> print (B)
(15 71
[9 ei)
mii.
2023-2024
Copyright © Pragmathiques 2023
ey2023-2024
Progmathiques
la commande np. cumsum A, 1) renvoie une matrice dont chaque ligne est la somme
cumulée des coefficients (on « repart 80 » 8 chaque nouvelle ligne).
Dans Hexemple suivant, les coefficients de la premiére ligne sont :1, 1 +5 = 6,
14547
'3. Et on repart a 0 avec la 2° ligne,
>>> Benp.cumsum (A, 1
>>> print (B)
[t1 6 13)
[8 11 15)
(21117)
De méme que précédemment, la fonction np. cumprod n’est pas au programme, mais je la
‘mets quand méme car on peut te 'introduire dans un sujet.
Elle fait la méme chose que np . cumsum mais avec un produit au lieu d’une addition
np-array({[1,5,7]¢ (8,3, 4]. (2,9, 6}])
>>> print (A)
157]
[8 3.4)
(2 9 61]
>>> print (np.cumprod (A) }
ta 5 35 280 © 840-3360 ©6720 60480 362880]
>>> print (np.cumprod (A, 0))
[ios 7
28)
[16 135 1681)
>>> print (np. cumprod(A,1))
tl 1 5 35]
(8 24 96)
{ 2 18 108])
Les fonctions liées a l’algébre
Dans la bibliothéque numpy.1inalg ona deux fonctions liées & 'alg&bre,
Lafonction a1 «ma:
rix_yank (A) donne le rang de la matrice A.
Copyeight © Pragmathiques 2023,2023-2024
Lafonction a1.e5 (A) renvoie deux matrices : la premiére contient les valeurs propres de
A et la deuxieme des vecteurs propres de 4 (2*”* année).
On peut les stocker dans deux matrices différentes.
9 6 2
Prenons lamatriceA=( 10 7 +)
-10 -6 3
>>> import numpy as np
>>> import numpy.linalg as al
p-array([[-9,~6, 2], [10,7,-2), [-10,-6,3}])
>>> print (A)
([-9 -6 2)
[10 7 -2)
[-10 -6 31)
>>> print (al.matrix_rank(A))
3
>>> print (al.eig(A))
(array({-1., 1., 1.J}, array({{-0.57735027, -0.49236596,
0.11241989], [ 0.57735027, 0.61545745, 0.140524861,
[-0.57735027, -0.61545745, 0.983674 11)
>>> valeurs, vecteurs=al.eig(A)
>>> print (valeurs)
t
>>> print (vecteurs)
[{-0.57735027 -0.49236596 0.11241989)
{ 0.57735027 0.61545745 0.14052486)
[-0.57735027 -0.61545745 0.983674 })
Perce
La forme des vecteurs propres n’est pas la plus belle...
‘On peut aussi calculer le rang de A ~ Al avec
>>> print (al.matrix_rank(A-np.eye (3, 3)))
1
>>> print (al.matrix_rank(A-(-1) *np.eye(3,3)))
2
Copyright © Pragmathiques 2023,
anProgmathques
Ce qui est utile car la dimension du sous-espace propre est dim(E) ~ rg(A 21).
Donc aux concours, on peut te poser des questions autour de a.
Les fonctions que I’on crée avec def
(On peut utiliser une fonction que l'on a définie et 'appliquer & une matrice comme les
fonctions np.exp et np.abs.
'I faut pour cela la vectoriser au moyen de f=np.vectorize(f) si le nom de la fonction est f.
Deux exemples.
numpy as np
array({(1,5,7], (8,3, 4], [2,9,6]])
>>> def £(x)
>> fenp. vectorize(£)
>>> £(A)
array([[10, 50, 70),
30, 401,
90, 60)))
>>> def calcul (x)
return 100*x-10
>> A)
array({{ 90,
790,
7) Comparaisons des coefficients d’une matrice
Comparaison d'une matrice avec un nombre
(On peut comparer une matrice avec un nombre. Elle renvoie alors une matrice de méme taille
que la matrice, avec des true et des false dans les coefficients.
2023-2024
Copyright © Pragmathiques 2023
22023-2024
Elle analyse coefficient par coefficient sila condition est vérifiée et renvoie alors les résultats
sous forme de true et false.
>>> import numpy as np
>>> Aenp.array(((0,-4],(2,10]])
>>> print (A)
If 0-4)
[21011
>>> print (A==0)
[{ True False]
[False False]]
>>> print (A!=0)
[[False True)
[ True True)]
>>> print (A>0)
[[False False]
{ True True]]
>>> print (A>> print (A>=0)
{{ True False]
True True]]
>>> print (Ac=0)
[{ True True]
(False False]]
>>> BeAD2
>>> print (B)
[(False False]
(False True}]
Copyright © Pragmathiques 2023
3Comparaison d’une matrice avec une autre matrice coefficient par
coefficient
(On peut aussi comparer deux matrices entre elles. Les coefficients a,,, et b,, sont alors
‘comparés un par un et une matrice true/false est envoyée.
>>> Asnp.array([[0,-4],[2,10]])
>>> print (A)
[ft 0-4)
[2 10))
>>> array (({1,-4],[1,-31])
>>> print (B)
(1-4)
Ld =3))
>>> print (A==B)
[[False True]
[False False}]
>>> print (A!=B)
[[ True False]
[ True True]]
>>> print (A>B)
[[False False]
[ True True]]
>>> print (ASB)
[{ True False)
ise False}]
>>> print (A>=B)
[(False True)
[ True True]]
>>> print (A<=B)
[f True True]
[False False]
2023-2024
Copyright © Pragmathiques 2023
84Proomathiques
Copyright © Pragmathiques 2023,
2023-2024
85dl 2023-2024
Progmathiques
TIT] DEF, IF ELSE ET RESOLUTIONS D’EQUATIONS
1) Utiliser def avec plusieurs variables de sortie.
(On a vu en I} B} 3) comment créer une fonction avec def.
‘On peut rentrer plusieurs variables d’entrées, mais on peut également avoir plusieurs valeurs
de sorties.
Prenons comme exemple une fonction def qui pour des valeurs de x et p nous renverrait :
+ Lecaleul de Sx
© Lecalcul de 3x + 2p
© Lecalcul de p +3
>>> def hix, p)
yr5*x
r=3*xt2*p
2 +3
return (y, 7, 2)
>>> h(1,2)
(7, 5)
est le nom de la fonction
Les antécédents sont x et p
Quand on appelle la fonction avec h(1,2), la fonction nous renvoie 3 valeurs qui
correspondent a 5x, 3x + 2p zr p +3 pour x = 1etp
>>> type((5, 7, 5))
(5,7,5) est un tuple, C'est-a-dire une structure de données en Python qui stocke des valeurs
qui peuvent étre de type différent. La grande différence avec une liste, est que ces valeurs ne
peuvent étre modifiées, et le tuple lui-méme ne peut pas étre modifiée, ou alors on créerait
Un autre tuple comme dans I'exemple suivant :
5)+(*nouveau",)
a
Copyright © Pragmathiques 2023 862023-2024
En revanche, quand on écrit juste h(1,2), on ne récupére pas les valeurs dans des variables. La
variable y utilisée a lintérieur de la fonction def, ne conserve pas sa valeur une fois la boucle
terminge,
>>> print [y)
Tracebac
(most recent call last):
File "", line 1, in
print (y)
Namefrror: name is not defined
Pour conserver ces valeurs, on a deux méthodes possibles.
La premiere est d'affecter le h(1,2) & une variable de sortie qui sera un tuple et on erée une
variable y qui prend I'index 0 du tuple (donc la premiére valeur), une variable r qui prend
Vindex 1 du tuble (donc la 2*** valeur), et une variable z qui prend I'index 2 du tuple (la... ou:
‘tu as compris l'histoire !)
>>> Resultat=h(1,2)
>>> ysResultat (0]
>>> r=Resultat [1]
>>> zsResultat [2]
>>> print (y)
5
>>> print
7
>>> print (2)
La deuxiéme méthode est d’affecter directement les 3 variables a gauche du =h(1,2)
>> yer, zsh (1,2)
>>> print (y)
>>> print (x)
7
Copyright © Pragmathiques 2023,Notons que on n’est pas obligé d'utiiser y, ret z en variables, méme si dans le def, c'est
celles qui sont utilisées.
>>> tu, veh (1,2)
>>> print (t)
>>> print (u)
7
>>> print (v)
5
2023-2024
Copyright © Pragmathiques 20232023-2024
Progmathiques
4) Résolutions de systemes
x+6y=2
(On cherche a résoudre le systéme |
ax +7y =3
Sous forme matricielle on a
pret
Etenposanta=(! $), x=())et#=(2)
AX =B
Et aprés calculs
14x + By =2
ence tsyime | 113 pasde solution, ca matric
21x + 12y =
4 8),
n=(St 8)restpasinvere
Résoudre un systame avec al.solve
Aprés avoir appelé la bibliothéque numpy.linalg, la fonction al.solve(a,b) résout léquation
ax=b,
x+6y=2
On applique avec A
2 .
8) et# = (2) pourlesysteme { —
14x + 8y =2
Et également avec R
por teayimef
ait ay =3
mport numpy as np
>>> import numpy.linalg as al
r y
Copyright © Pragmathiques 2023, 89nee
>>> Aenp.array(({1,6],[2,7]])
>>> print (A)
(1 6)
[2
p-array({(2],[3]})
>>> B
array([[2],
(31)
>>> X:
=al.solve(A,B)
>o> x
array({(0.8],
(0.291)
>>> print (x)
[10.8]
0.21)
>>> Renp.array({(14,8],[21,12]])
>>> print (R)
[aa a1
[21 121)
>>> Keal. solve (R,B)
Traceback (most recent call last):
File "", line 1, in
1. solve (R,B)
raise LinAlgError("Singular matrix")
numpy.linalg.LinAlgError: Singular matrix
(On voit que dans le cas oii R n'est pas inversible et donc que le systéme n’a pas de solution,
ona un message erreur.
Mais al-solve nest pas utile que pour le cas ou B est une matrice colonne.
On peut aussi
es quai Best une race carte da ne tale que A
Gx, DG 3)
Done on peut essayer al-solve ici.
Copyright © Pragmathiques 2023,
2023-20242023-2024
Pregmathiques
Remarque, on n’est pas obligé de rentrer au préalable la matrice, mais on peut le faire
directement dans le al.solve, comme c'est le cas ici
>> print (al. solve(A,np.array([[
tha 2.)
[-.. -1.07
Mais pour cela, il faut que la matrice soit inversible !
Meme dans le cas ot il ya une solution, sila matrice n’est pas inversible, le alsolve ne
fonctionne pas (probablement parce que la solution ne serait pas unique !).
Voyons un exemple. Reprenons notrematice R. Ona
1M a).(1 1) (6 6
21 )*(4 “= 5)
Et pourtant al solve nous donne :
Ive (Rynp.array({ [6,6], [9,9]]))
recent call last):
"cpyshell#16>", line 1, in
-solve (Ry np.array([[6,6],(9,9]]})
ine 200, in solve
File "<_array function internals>",
numpy.linalg.LinAlgError: Singular matrix
Résoudre un systéme avec I’inverse d’une matrice
Eh oui, on peut tout simplement faire 'inverse de la matrice car AX = Ye» X = A"tY.
On reprend les commandes vues dans le II] 5). Attention, pour le produit de matrices, on
utilise np.doti) 1
>>> Kenp.dot (al. inv (A) ,B)
>>> print (x)
(0.8)
0.2
dot (al.matrix_power (A,-1),8)
>>> print (x)
8
Copyright © Pragmathiques 2023,
91