Wikilivres
frwikibooks
https://fr.wikibooks.org/wiki/Accueil
MediaWiki 1.47.0-wmf.9
first-letter
Média
Spécial
Discussion
Utilisateur
Discussion utilisateur
Wikilivres
Discussion Wikilivres
Fichier
Discussion fichier
MediaWiki
Discussion MediaWiki
Modèle
Discussion modèle
Aide
Discussion aide
Catégorie
Discussion catégorie
Transwiki
Discussion Transwiki
Wikijunior
Discussion Wikijunior
TimedText
TimedText talk
Module
Discussion module
Event
Event talk
Philosophie/Histoire de la philosophie
0
615
769254
764752
2026-07-01T03:43:53Z
PandaMystique
119061
769254
wikitext
text/x-wiki
<!-- ═══════════════════════════════════════════════════════════════════
SECTION : PHILOSOPHIE ANTIQUE
═══════════════════════════════════════════════════════════════════ -->
<div id="Antique" style="margin: 30px 0 15px 0; padding-bottom: 6px; border-bottom: 2px solid #c9a860;">
<span style="font-size: 1.15em; font-weight: 700; color: #6a5020; letter-spacing: 0.02em;">PHILOSOPHIE ANTIQUE</span>
<span style="font-size: 0.85em; color: #999; margin-left: 12px;">VIᵉ siècle av. J.-C. au Vᵉ siècle</span>
</div>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- PRÉSOCRATIQUES -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #faf6ed, #f2ebdc); border:1px solid #d4c090; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#5a4a20; margin-bottom:8px;">🌅 [[Philosophie/Présocratiques|Présocratiques]]</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Les premiers penseurs grecs cherchent le principe (''archè'') de toutes choses.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #d4c090; padding-top:8px;">
→ [[Philosophie/Thalès de Milet|Thalès de Milet]]<br/>
→ [[Philosophie/Anaximandre de Milet|Anaximandre]]<br/>
→ [[Dictionnaire de philosophie/Empédocle|Empédocle]]<br>
→ [[Dictionnaire de philosophie/Anaxagore|Anaxagore]]
</div>
</td>
<!-- PLATON -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #fdf8ed, #f6eedc); border:1px solid #d4b860; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#5a4800; margin-bottom:8px;">📜 [[Pour lire Platon|Platon]]</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Théorie des Idées, dialectique et fondation de l'Académie.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #d4b860; padding-top:8px;">
→ [[Pour lire Platon/Guide des dialogues/Apologie de Socrate|Apologie de Socrate]]<br/>
→ [[Pour lire Platon/Guide des dialogues/Ion|Ion]]<br/>
→ [[Pour lire Platon/Vocabulaire|Vocabulaire platonicien]]
</div>
</td>
<!-- STOÏCIENS -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f8f4e8, #f0e8d8); border:1px solid #c8b070; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#5a4820; margin-bottom:8px;">🏛️ Stoïcisme</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Vivre selon la nature, maîtriser ses passions, accepter le destin.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #c8b070; padding-top:8px;">
→ [[Les Stoïciens : Épictète Le poignard à la main|Épictète]]
</div>
</td>
</tr>
</table>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- ARISTOTE -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #fdf9ee, #f6efdb); border:1px solid #d4b860; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#5a4800; margin-bottom:4px;">[[Dictionnaire de philosophie/Aristote|Aristote]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">384-322 av. J.-C.</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">Logique, métaphysique, éthique : l'élève de Platon fonde le Lycée et met en ordre le savoir.</div>
</td>
<!-- SCEPTICISME ANTIQUE -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f8f4e8, #f0e8d8); border:1px solid #c8b070; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#5a4820; margin-bottom:8px;">⚖️ [[Dictionnaire de philosophie/Scepticisme|Scepticisme antique]]</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Suspendre le jugement (''épochè'') pour délivrer l'esprit de l'inquiétude.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #c8b070; padding-top:8px;">
→ [[Dictionnaire de philosophie/Pyrrhon d'Élis|Pyrrhon d'Élis]]<br/>
→ [[Dictionnaire de philosophie/Carnéade|Carnéade]]
</div>
</td>
</tr>
</table>
<!-- ═══════════════════════════════════════════════════════════════════
SECTION : PHILOSOPHIE MODERNE
═══════════════════════════════════════════════════════════════════ -->
<div id="Moderne" style="margin: 35px 0 15px 0; padding-bottom: 6px; border-bottom: 2px solid #4a90b8;">
<span style="font-size: 1.15em; font-weight: 700; color: #2a5a7a; letter-spacing: 0.02em;">PHILOSOPHIE MODERNE</span>
<span style="font-size: 0.85em; color: #999; margin-left: 12px;">XVIᵉ au XVIIIᵉ siècle</span>
</div>
<!-- Sous-section : XVIIe siècle -->
<div style="font-size: 0.9em; font-weight: 600; color: #4a6a85; margin: 20px 0 12px 0; padding-left: 10px; border-left: 3px solid #a0c0d8;">XVIIᵉ siècle : l'âge classique</div>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- DESCARTES -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #eef4f8, #e0ecf4); border:1px solid #6090b8; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#1a4a6a; margin-bottom:4px;">[[Dictionnaire de philosophie/René Descartes|René Descartes]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1596-1650</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Le ''cogito'', le doute méthodique et la fondation de la philosophie moderne.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #6090b8; padding-top:8px;">
→ [[Méditations métaphysiques]]
</div>
</td>
<!-- SPINOZA -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #edf5f2, #dfeee8); border:1px solid #5a9878; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#1a5038; margin-bottom:4px;">Baruch Spinoza</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1632-1677</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Substance unique, déterminisme et béatitude par la connaissance.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #5a9878; padding-top:8px;">
→ [[Commentaire de l'Éthique]]
</div>
</td>
<!-- PASCAL -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f5f0f8, #ebe4f2); border:1px solid #8878a8; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#3a2860; margin-bottom:4px;">Blaise Pascal</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1623-1662</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Misère et grandeur de l'homme, le pari, la condition humaine.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #8878a8; padding-top:8px;">
→ [[Philosophie/Commentaire du passage à propos de l'Homme esclave du divertissement|Le divertissement]]<br/>
→ [[Philosophie/Commentaire du passage à propos des deux infinis|Les deux infinis]]
</div>
</td>
</tr>
</table>
<!-- Sous-section : XVIIIe siècle -->
<div style="font-size: 0.9em; font-weight: 600; color: #4a6a85; margin: 25px 0 12px 0; padding-left: 10px; border-left: 3px solid #a0c0d8;">XVIIIᵉ siècle : les Lumières</div>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- HUME -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f0f5f8, #e2eef5); border:1px solid #5088b0; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#1a4a68; margin-bottom:4px;">David Hume</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1711-1776</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Empirisme intégral, critique de la causalité et scepticisme modéré.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #5088b0; padding-top:8px;">
→ [[Philosophie/Vocabulaire/David Hume|Vocabulaire]]
</div>
</td>
<!-- KANT -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #eef2f8, #e0e8f2); border:1px solid #6080a8; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#2a3860; margin-bottom:4px;">Emmanuel Kant</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1724-1804</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Révolution copernicienne, critique de la raison et impératif catégorique.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #6080a8; padding-top:8px;">
→ [[Philosophie/Vocabulaire/Kant|Vocabulaire]]<br/>
→ [[Commentaire de la Fondation de la métaphysique des mœurs|Fondation de la métaphysique des mœurs]]
</div>
</td>
</tr>
</table>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- LA METTRIE -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f2f6f0, #e6efe4); border:1px solid #6a9868; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#1a4a30; margin-bottom:4px;">[[Dictionnaire de philosophie/Julien Offray de La Mettrie|Julien Offray de La Mettrie]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1709-1751</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">Le matérialisme conséquent : l'homme comme machine, la pensée comme fonction du corps.</div>
</td>
<!-- CHAMFORT -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f6f2ee, #eee6dc); border:1px solid #b09070; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#5a3d20; margin-bottom:4px;">[[Dictionnaire de philosophie/Chamfort|Chamfort]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1740-1794</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">Moraliste des Lumières finissantes : maximes et anecdotes sur la société et le pouvoir.</div>
</td>
</tr>
</table>
<!-- ═══════════════════════════════════════════════════════════════════
SECTION : PHILOSOPHIE CONTEMPORAINE
═══════════════════════════════════════════════════════════════════ -->
<div id="Contemporaine" style="margin: 35px 0 15px 0; padding-bottom: 6px; border-bottom: 2px solid #9070b0;">
<span style="font-size: 1.15em; font-weight: 700; color: #5a3d7a; letter-spacing: 0.02em;">PHILOSOPHIE CONTEMPORAINE</span>
<span style="font-size: 0.85em; color: #999; margin-left: 12px;">XIXᵉ au XXIᵉ siècle</span>
</div>
<!-- Sous-section : XIXe siècle -->
<div style="font-size: 0.9em; font-weight: 600; color: #6a5080; margin: 20px 0 12px 0; padding-left: 10px; border-left: 3px solid #c0a8d0;">XIXᵉ siècle</div>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- NIETZSCHE -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f8f0f2, #f0e4e8); border:1px solid #a87080; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#5a2838; margin-bottom:4px;">[[Philosophie/Nietzsche|Friedrich Nietzsche]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1844-1900</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Critique de la morale, volonté de puissance, mort de Dieu et éternel retour.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #a87080; padding-top:8px;">
→ [[Dictionnaire de philosophie/Friedrich Nietzsche|Article du Dictionnaire]]
</div>
</td>
<!-- MARX -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f7f0ec, #efe2d8); border:1px solid #b07850; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#6a3818; margin-bottom:4px;">[[Dictionnaire de philosophie/Karl Marx|Karl Marx]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1818-1883</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">Matérialisme historique, critique de l'économie politique et théorie de l'aliénation.</div>
</td>
</tr>
</table>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- STIRNER -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f4f1f6, #e9e3ee); border:1px solid #8878a0; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#3a2858; margin-bottom:4px;">[[Dictionnaire de philosophie/Max Stirner|Max Stirner]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1806-1856</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">Contre Dieu, l'État et l'Homme abstrait : l'Unique et sa propriété.</div>
</td>
<!-- KROPOTKINE -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f1f4f2, #e3ebe6); border:1px solid #5a9878; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#1a5038; margin-bottom:4px;">[[Dictionnaire de philosophie/Pierre Kropotkine|Pierre Kropotkine]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1842-1921</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">L'entraide comme facteur de l'évolution : une anarchie fondée sur les sciences.</div>
</td>
</tr>
</table>
<!-- Sous-section : XXe siècle -->
<div style="font-size: 0.9em; font-weight: 600; color: #6a5080; margin: 25px 0 12px 0; padding-left: 10px; border-left: 3px solid #c0a8d0;">XXᵉ siècle</div>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- HEIDEGGER -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f3eef8, #e8e0f2); border:1px solid #8068a0; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#3a2858; margin-bottom:4px;">Martin Heidegger</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1889-1976</div>
<div style="font-size:0.88em; color:#555; line-height:1.6; margin-bottom:10px;">Question de l'être, ''Dasein'', temporalité et critique de la métaphysique.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #8068a0; padding-top:8px;">
→ [[Être et Temps]]
</div>
</td>
<!-- MERLEAU-PONTY -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #eef4f6, #dfebf0); border:1px solid #5088a0; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#1a4858; margin-bottom:4px;">[[Dictionnaire de philosophie/Maurice Merleau-Ponty|Maurice Merleau-Ponty]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1908-1961</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">La phénoménologie du corps : nous habitons le monde avant de le penser.</div>
</td>
</tr>
</table>
<!-- Sous-section : Tradition analytique -->
<div style="font-size: 0.9em; font-weight: 600; color: #6a5080; margin: 25px 0 12px 0; padding-left: 10px; border-left: 3px solid #c0a8d0;">Tradition analytique (XXᵉ et XXIᵉ siècle)</div>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- SCHLICK -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #eef2f8, #e0e8f2); border:1px solid #6080a8; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#2a3860; margin-bottom:4px;">[[Dictionnaire de philosophie/Moritz Schlick|Moritz Schlick]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1882-1936</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">Fondateur du Cercle de Vienne : vérification, sens et positivisme logique.</div>
</td>
<!-- QUINE -->
<td style="width:50%; vertical-align:top; position:relative; background:linear-gradient(180deg, #eef2f8, #e0e8f2); border:1px solid #6080a8; border-radius:8px; padding:16px 18px; overflow:hidden;">
<div style="font-weight:bold; font-size:1.05em; color:#2a3860; margin-bottom:4px;">[[Dictionnaire de philosophie/Willard Van Orman Quine|Willard Van Orman Quine]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">1908-2000</div>
<div style="font-size:0.88em; color:#555; line-height:1.6;">Contre la distinction analytique/synthétique : holisme et naturalisation du savoir.</div>
</td>
</tr>
</table>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- NAGEL -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f0f2f8, #e5e8f2); border:1px solid #7080a0; border-radius:8px; padding:14px 16px; overflow:hidden;">
<div style="font-weight:bold; font-size:1em; color:#2a3860; margin-bottom:4px;">[[Dictionnaire de philosophie/Thomas Nagel|Thomas Nagel]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">né en 1937</div>
<div style="font-size:0.85em; color:#555; line-height:1.5;">« Quel effet cela fait-il d'être une chauve-souris ? » : subjectivité et conscience.</div>
</td>
<!-- CHALMERS -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f0f2f8, #e5e8f2); border:1px solid #7080a0; border-radius:8px; padding:14px 16px; overflow:hidden;">
<div style="font-weight:bold; font-size:1em; color:#2a3860; margin-bottom:4px;">[[Dictionnaire de philosophie/David Chalmers|David Chalmers]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">né en 1966</div>
<div style="font-size:0.85em; color:#555; line-height:1.5;">Le « problème difficile » de la conscience et le dualisme naturaliste.</div>
</td>
<!-- WILLIAMSON -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f0f2f8, #e5e8f2); border:1px solid #7080a0; border-radius:8px; padding:14px 16px; overflow:hidden;">
<div style="font-weight:bold; font-size:1em; color:#2a3860; margin-bottom:4px;">[[Dictionnaire de philosophie/Timothy Williamson|Timothy Williamson]]</div>
<div style="font-size:0.8em; color:#888; margin-bottom:8px;">né en 1955</div>
<div style="font-size:0.85em; color:#555; line-height:1.5;">Le vague, les limites du savoir et la méthode de la philosophie.</div>
</td>
</tr>
</table>
<!-- Sous-section : Courants -->
<div style="font-size: 0.9em; font-weight: 600; color: #6a5080; margin: 25px 0 12px 0; padding-left: 10px; border-left: 3px solid #c0a8d0;">Courants philosophiques</div>
<table style="width:100%; border-collapse:separate; border-spacing:12px;">
<tr>
<!-- PHILOSOPHIE ANALYTIQUE -->
<td style="width:33%; vertical-align:top; position:relative; background:linear-gradient(180deg, #f0f2f8, #e5e8f2); border:1px solid #7080a0; border-radius:8px; padding:14px 16px; overflow:hidden;">
<div style="font-weight:bold; font-size:1em; color:#2a3860; margin-bottom:6px;">🔬 [[Philosophie analytique]]</div>
<div style="font-size:0.85em; color:#555; line-height:1.5; margin-bottom:10px;">Analyse logique du langage et clarification des concepts.</div>
<div style="font-size:0.85em; color:#666; border-top:1px dashed #8068a0; padding-top:8px;">
→ [[Ignorance: A Case for Scepticism]]
</div>
</td>
<!-- Placeholders pour futurs courants -->
<td style="width:33%; vertical-align:top; background: #fafafa; border: 1px dashed #ccc; border-radius:8px; padding:14px 16px; color: #999; font-size: 0.85em; text-align: center;">
''À venir : Phénoménologie''
</td>
<td style="width:33%; vertical-align:top; background: #fafafa; border: 1px dashed #ccc; border-radius:8px; padding:14px 16px; color: #999; font-size: 0.85em; text-align: center;">
''À venir : Existentialisme''
</td>
</tr>
</table>
<!-- ═══════════════════════════════════════════════════════════════════
SECTION : BIBLIOGRAPHIE
═══════════════════════════════════════════════════════════════════ -->
<div id="Bibliographie" style="margin: 35px 0 15px 0; padding-bottom: 6px; border-bottom: 2px solid #888;">
<span style="font-size: 1.15em; font-weight: 700; color: #444; letter-spacing: 0.02em;">BIBLIOGRAPHIE</span>
<span style="font-size: 0.85em; color: #999; margin-left: 12px;">Ouvrages de référence</span>
</div>
<div style="background: linear-gradient(180deg, #fafafa, #f5f5f5); border: 1px solid #e0e0e0; border-radius: 8px; padding: 18px 22px; font-size: 0.92em; line-height: 1.8; color: #444;">
<div style="margin-bottom: 8px;">📚 <strong>PRADEAU</strong>, Jean-François (dir.), ''Histoire de la philosophie'', Éditions du Seuil, 2009</div>
<div style="margin-bottom: 8px;">📚 <strong>CHÂTELET</strong>, François, ''Histoire de la philosophie'', 8 tomes, Paris, Hachette-Pluriel, 1999-2000</div>
<div style="margin-bottom: 8px;">📚 <strong>BRÉHIER</strong>, Émile, ''Histoire de la philosophie'', PUF, Quadrige, 2004, {{ISBN|2-13054-396-0}}. [http://classiques.uqac.ca/classiques/brehier_emile/brehier_emile.html Texte en ligne]</div>
<div>📚 <strong>ZARADER</strong>, Jean-Pierre (dir.), ''Le vocabulaire des philosophes'', 5 tomes, Paris, Ellipses, 2002-2006</div>
</div>
<!-- ═══════════════════════════════════════════════════════════════════
FOOTER : RESSOURCES
═══════════════════════════════════════════════════════════════════ -->
<div style="margin-top: 25px; background: linear-gradient(180deg, #f5f5f3, #eaeae8); border: 1px solid #d8d8d5; border-radius: 8px; padding: 16px 20px;">
<div style="font-size: 0.8em; font-weight: 700; color: #555; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 10px;">Voir aussi</div>
<div style="font-size: 0.9em; color: #444; line-height: 1.7;">
[[Philosophie|Portail Philosophie]] •
[[Dictionnaire de philosophie|Dictionnaire des concepts]] •
[[Manuel de terminale de philosophie|Manuel de Terminale]] •
[[w:Histoire de la philosophie|Wikipédia]]
</div>
</div>
[[Catégorie:Discipline philosophique]]
[[Catégorie:Histoire|Histoire de la philosophie]]
[[Catégorie:Histoire de la philosophie|*]]
kdybjdgufc34masjcpcmiwxzzzfdv3m
Catégorie:Commentaire philosophique
14
3800
769253
765035
2026-07-01T03:38:58Z
PandaMystique
119061
769253
wikitext
text/x-wiki
[[catégorie:Philosophie]]
[[Catégorie:Commentaire philosophique (livre)]]
cj2u2j2xk5fi61dz1zdljj1pklfi1jv
Catégorie:Philosophie
14
3802
769268
765030
2026-07-01T04:27:54Z
PandaMystique
119061
769268
wikitext
text/x-wiki
{{Méta lien portail|couleur tour=#B08C7B|couleur fond=#7BB08C|
image=Owl of Minerva.png|taille image=25|
texte=[[Philosophie]] : accédez à tous les livres de philosophie de Wikilivres.
}}
{{autres projets|commons=Category:Philosophy| s = Portail:Philosophie}}
Cette catégorie rassemble les livres, cours et ressources de philosophie de Wikilivres, ainsi que les sous-catégories qui les organisent : ouvrages de référence, cours d'initiation, commentaires de textes et études thématiques.
[[Catégorie:Classe 1 - Philosophie et psychologie|*]]
im93h2aq74jgqauc0icegss3na9qqit
769269
769268
2026-07-01T04:44:35Z
PandaMystique
119061
769269
wikitext
text/x-wiki
<div style="display:flex; align-items:center; margin:0 0 1em 0; padding:12px 18px; background:linear-gradient(135deg,#f6efdc,#eaddba); border:2px solid #cbaa62; border-radius:16px; box-shadow:0 1px 4px rgba(0,0,0,0.15); overflow:hidden;">
<div style="flex:0 0 auto; margin-right:14px;">[[Fichier:Owl of Minerva.png|46px|Chouette de Minerve|link=Philosophie]]</div>
<div style="flex:1 1 auto; min-width:0;">
<div style="font-size:1.5em; font-weight:700; letter-spacing:0.03em; line-height:1.15;">[[Philosophie|<span style="color:#6a5218;">Philosophie</span>]]</div>
<div style="font-size:0.92em; color:#7c6636; margin-top:3px;">De Platon à la philosophie analytique</div>
<div style="font-size:0.85em; margin-top:9px;">
[[Philosophie/Histoire de la philosophie|Histoire de la philosophie]] · [[Dictionnaire de philosophie|Dictionnaire]] · [[Manuel de terminale de philosophie|Manuel de terminale]]
</div>
</div>
</div>
{{autres projets|commons=Category:Philosophy|s=Portail:Philosophie}}
Cette catégorie rassemble les livres, cours et ressources de philosophie de Wikilivres, ainsi que les sous-catégories qui les organisent : ouvrages de référence, cours d'initiation, commentaires de textes et études thématiques.
[[Catégorie:Classe 1 - Philosophie et psychologie|*]]
7nfq0nn7hm1q6pncqdtix6qntxup7mv
769270
769269
2026-07-01T04:56:25Z
PandaMystique
119061
769270
wikitext
text/x-wiki
<div style="display:flex; align-items:center; margin:0 0 1em 0; padding:12px 18px; background:linear-gradient(135deg,#f1eaf4,#ddc9e6); border:2px solid #8f6ba6; border-radius:16px; box-shadow:0 1px 4px rgba(0,0,0,0.15); overflow:hidden;">
<div style="flex:0 0 auto; margin-right:14px;">[[Fichier:Owl of Minerva.png|46px|Chouette de Minerve|link=Philosophie]]</div>
<div style="flex:1 1 auto; min-width:0;">
<div style="font-size:1.5em; font-weight:700; letter-spacing:0.03em; line-height:1.15;">[[Philosophie|<span style="color:#4a2c62;">Philosophie</span>]]</div>
<div style="font-size:0.92em; color:#5c3f74; margin-top:3px;">De Platon à la philosophie analytique, en libre accès.</div>
<div style="font-size:0.85em; margin-top:9px;">
[[Philosophie/Histoire de la philosophie|Histoire de la philosophie]] · [[Dictionnaire de philosophie|Dictionnaire]] · [[Manuel de terminale de philosophie|Manuel de terminale]]
</div>
</div>
</div>
{{autres projets|commons=Category:Philosophy|s=Portail:Philosophie}}
Cette catégorie rassemble les livres, cours et ressources de philosophie de Wikilivres, ainsi que les sous-catégories qui les organisent : ouvrages de référence, cours d'initiation, commentaires de textes et études thématiques.
[[Catégorie:Classe 1 - Philosophie et psychologie|*]]
nxtetqa11tyxbmufrqe5i43l1ly0b0w
Grec ancien/Dieux
0
29805
769271
768170
2026-07-01T06:48:05Z
~2026-34862-02
124042
/* Liste détaillée */
769271
wikitext
text/x-wiki
{{Grec ancien}}
Il existe un très grand nombre de dieux grecs. ([[w:Généalogie de la mythologie grecque|les listes]] en font état de plus de 200) Ceux-ci sont tous classés selon leur famille :
*Les Ancêtres (Chaos, Gaïa, Ouranos)
*Descendants d'Ouranos et de Gaïa (Aphrodite, Molios, Théomisès)
*Géants (Cerbère, Chimère, Sphinx, Orthos)
*Descendance des Titans et des Titanides (Thémis, Pirène, Batia)
*Descendants des monstres (Cyclope)
*Descendants de Pontos (Amphitrite, Achille, Néréïdes)
*Descendants d'Éros
*Descendants d'Erèbe
*Descendants de Nyx
*Descendants de Tartare
*Descendants de Python
*Descendants d'Amythaon
*Descendants d'Idmon
*Descendants de Strophios
*Descendants de Plégias
*Nymphes
''Il existe de nombreuses sous-familles. En raison de leur nombre, nous n'en ferons pas état ici.''
== Les divinités Olympiennes ==
[[Fichier:Mytikas summit PJS.jpg|left|thumb|Le mont Olympe.]]
[[Fichier:Sarcophagus Prometheus Louvre Ma339.jpg|thumb|center|370px|Le cortège des dieux de l'Olympe. Sarcophage romain, vers 240 ap. J.-C., Musée du Louvre, Paris, France.]]
Les divinités Olympiennes, au nombre de 12, sont les dieux grecs qui vivent sur le mont Olympe. Ce nombre varie selon les siècles ; on y retrouve toujours Zeus, Héra, Poséidon, Arès, Hermès, Héphaïstos, Athéna, Apollon et Artémis qui sont complétés par Hestia, Déméter, Aphrodite, Dionysos et Hadès en fonction des époques.
== Liste détaillée ==
** [[/Aidos/]]
** [[/Aléthée/|Althée]]
** [[/Ananké/]]
** [[/Antéros/]]
** [[/Apaté/]]
** [[/Apollon/]]
** [[/Aphrodite/]]
** [[/Arès/]]
** [[/Arété/]]
** [[/Artémis/]]
** [[/Asclépios/]]
** [[/Até/]]
** [[/Athéna/]]
** [[/Chronos/]]
** [[/Cronos/]]
** [[/Coros/]]
** [[/Cybèle/]]
** [[/Déimos/]]
** [[/Déméter/]]
** [[/Dicé/]]
** [[/Dionysos/]]
** [[/Dolos/]]
** [[/Dysnomie/]]
** [[/Dyssebeia/]]
** [[/Dyssébie/]]
** [[/Eiréné/]]
** [[/Eunomie/]]
** [[/Eusébie/]]
** [[/Éléos/]]
** [[/Elpis/]]
** [[/Éole/]]
** [[/Éosphoros/]]
** [[/Éos/]]
** [[/Érèbe/]]
** [[/Éris/]]
** [[/Éros/]]
** [[/Ésa/]]
** [[/Gaïa/]]
** [[/Géras/]]
** [[/Harmonie/]]
** [[/Hadès/]]
** [[/Hespéros/]]
** [[/Hébé/]]
** [[/Hédoné/]]
** [[/Hédylogos/]]
** [[/Héphaïstos/]]
** [[/Héra/]]
** [[/Hermès/]]
** [[/Hestia/]]
** [[/Himéros/]]
** [[/Horkos/]]
** [[/Hybris/]]
** [[/Hygie/]]
** [[/Hypnos/]]
** [[/Hébé/]]
** [[/Hécate/]]
** [[/Hélios/]]
** [[/Héméra/]]
** [[/Hypnos/]]
** [[/Ilithyie/]]
** [[/Limos/]]
** [[/Lyssa/]]
** [[/Mania/]]
** [[/Momos/]]
** [[/Moros/]]
** [[/Métis/]]
** [[/Némésis/]]
** [[/Niké/]]
** [[/Nyx/]]
** [[/Oizys/]]
** [[/Ouranos/]]
** [[/Panacée/]]
** [[/Pan/]]
** [[/Péitho/]]
** [[/Pénia/]]
** [[/Perséphone/]]
** [[/Philotès/]]
** [[/Phobos/]]
** [[/Pistis/]]
** [[/Poséidon/]]
** [[/Pothos/]]
** [[/Rhéa/]]
** [[/Séléné/]]
** [[/Sophrosyne/]]
** [[/Thanatos/]]
** [[/Thémis/]]
** [[/Tyché/]]
** [[/Zélos/]]
** [[/Zeus/]]
** [[/Épiphron/]]
* [[../Texte : Odyssée|Texte : L'Odyssée, Livre 7]]
* [[../Exercices chapitre 4|Exercices]]
== Généalogie ==
{{Grec ancien/Arbre généalogique dieux}}
== Questions ==
{{Avertissement exercice}}
#Quelles divinités pouvez-vous reconnaître sur la fresque représentant le cortège des Dieux (§ « ''Les divinités Olymipiennes'' ») ?
{{boîte déroulante|titre=afficher les réponses|contenu=
On peut voir sur cette fresque (de gauche à droite) :
*Athéna,
*Hermès et son pétase ailé,
*Poséidon,
*Artémis.
}}
lj01kpq6fewsaxfhjuiaubddvpyxybh
Wikilivres:Compilations/Dictionnaire de philosophie
4
30507
769258
767521
2026-07-01T03:55:04Z
PandaMystique
119061
769258
wikitext
text/x-wiki
{{Compilation}}
'''Livre en cours d'écriture'''
== Dictionnaire de philosophie ==
;A
:[[Dictionnaire de philosophie/A (logique)|A]]
:[[Dictionnaire de philosophie/A priori|A priori]]
:[[Dictionnaire de philosophie/Abduction|Abduction]]
:[[Dictionnaire de philosophie/Aboulie|Aboulie]]
:[[Dictionnaire de philosophie/Absolu|Absolu]]
:[[Dictionnaire de philosophie/Absolutisme|Absolutisme]]
:[[Dictionnaire de philosophie/Abstraction|Abstraction]]
:[[Dictionnaire de philosophie/Absurde|Absurde]]
:[[Dictionnaire de philosophie/Acatalépsie|Acatalépsie]]
:[[Dictionnaire de philosophie/Accident|Accident]]
:[[Dictionnaire de philosophie/Action|Action]]
:[[Dictionnaire de philosophie/Affection|Affection]]
:[[Dictionnaire de philosophie/Agnosticisme|Agnosticisme]]
:[[Dictionnaire de philosophie/Aliénation|Aliénation]]
:[[Dictionnaire de philosophie/Altérité|Altérité]]
:[[Dictionnaire de philosophie/Altruisme|Altruisme]]
:[[Dictionnaire de philosophie/Âme|Âme]]
:[[Dictionnaire de philosophie/Amitié|Amitié]]
:[[Dictionnaire de philosophie/Amour|Amour]]
:[[Dictionnaire de philosophie/Anarchisme|Anarchisme]]
:[[Dictionnaire de philosophie/Anaxagore|Anaxagore]]
:[[Dictionnaire de philosophie/Angoisse|Angoisse]]
:[[Dictionnaire de philosophie/Animal|Animal]]
:[[Dictionnaire de philosophie/Anthropocentrisme|Anthropocentrisme]]
:[[Dictionnaire de philosophie/Antinomie|Antinomie]]
:[[Dictionnaire de philosophie/Aporie|Aporie]]
:[[Dictionnaire de philosophie/Apparence|Apparence]]
:[[Dictionnaire de philosophie/Argentine (Philosophie)|Argentine (Philosophie)]]
:[[Dictionnaire de philosophie/Argument|Argument]]
:[[Dictionnaire de philosophie/Aristote|Aristote]]
:[[Dictionnaire de philosophie/Art|Art]]
:[[Dictionnaire de philosophie/Art (introduction)|Art (introduction)]]
:[[Dictionnaire de philosophie/Art et Vérité|Art et Vérité]]
:[[Dictionnaire de philosophie/Ataraxie|Ataraxie]]
:[[Dictionnaire de philosophie/Athéisme|Athéisme]]
:[[Dictionnaire de philosophie/Atomisme|Atomisme]]
:[[Dictionnaire de philosophie/Attribut|Attribut]]
:[[Dictionnaire de philosophie/Authenticité|Authenticité]]
:[[Dictionnaire de philosophie/Autonomie|Autonomie]]
:[[Dictionnaire de philosophie/Autorité|Autorité]]
:[[Dictionnaire de philosophie/Avortement|Avortement]]
:[[Dictionnaire de philosophie/Axiome|Axiome]]
;B
:[[Dictionnaire de philosophie/Bateau de Neurath|Bateau de Neurath]]
:[[Dictionnaire de philosophie/Beau|Beau]]
:[[Dictionnaire de philosophie/Besoin|Besoin]]
:[[Dictionnaire de philosophie/Bien|Bien]]
:[[Dictionnaire de philosophie/Bioéthique|Bioéthique]]
:[[Dictionnaire de philosophie/Bonheur|Bonheur]]
;C
:[[Dictionnaire de philosophie/Carnéade|Carnéade]]
:[[Dictionnaire de philosophie/Causalité|Causalité]]
:[[Dictionnaire de philosophie/Certitude|Certitude]]
:[[Dictionnaire de philosophie/David Chalmers|Chalmers]]
:[[Dictionnaire de philosophie/Chamfort|Chamfort]]
:[[Dictionnaire de philosophie/Chine|Chine]]
:[[Dictionnaire de philosophie/Cogito|Cogito]]
:[[Dictionnaire de philosophie/Concept|Concept]]
:[[Dictionnaire de philosophie/Connaissance|Connaissance]]
:[[Dictionnaire de philosophie/Conscience|Conscience]]
:[[Dictionnaire de philosophie/Consensus|Consensus]]
:[[Dictionnaire de philosophie/Contingence|Contingence]]
:[[Dictionnaire de philosophie/Convention|Convention]]
:[[Dictionnaire de philosophie/Courage|Courage]]
:[[Dictionnaire de philosophie/Criticisme|Criticisme]]
:[[Dictionnaire de philosophie/Croyance|Croyance]]
:[[Dictionnaire de philosophie/Culture|Culture]]
;D
:[[Dictionnaire de philosophie/Dasein|Dasein]]
:[[Dictionnaire de philosophie/Décadence|Décadence]]
:[[Dictionnaire de philosophie/Découverte|Découverte]]
:[[Dictionnaire de philosophie/Déduction|Déduction]]
:[[Dictionnaire de philosophie/Définition|Définition]]
:[[Dictionnaire de philosophie/Déisme|Déisme]]
:[[Dictionnaire de philosophie/Démocratie|Démocratie]]
:[[Dictionnaire de philosophie/René Descartes|Descartes]]
:[[Dictionnaire de philosophie/Désir|Désir]]
:[[Dictionnaire de philosophie/Désobéissance|Désobéissance]]
:[[Dictionnaire de philosophie/Déterminisme|Déterminisme]]
:[[Dictionnaire de philosophie/Diallèle|Diallèle]]
:[[Dictionnaire de philosophie/Dialectique|Dialectique]]
:[[Dictionnaire de philosophie/Différence ontologique|Différence ontologique]]
:[[Dictionnaire de philosophie/Divertissement|Divertissement]]
:[[Dictionnaire de philosophie/Doute|Doute]]
:[[Dictionnaire de philosophie/Droit|Droit]]
:[[Dictionnaire de philosophie/Dualisme|Dualisme]]
;E
:[[Dictionnaire de philosophie/Égalité|Égalité]]
:[[Dictionnaire de philosophie/Émergence|Émergence]]
:[[Dictionnaire de philosophie/Empédocle|Empédocle]]
:[[Dictionnaire de philosophie/Empirisme|Empirisme]]
:[[Dictionnaire de philosophie/Épistémologie|Épistémologie]]
:[[Dictionnaire de philosophie/Erreur|Erreur]]
:[[Dictionnaire de philosophie/Esthétique dans la pensée chinoise|Esthétique dans la pensée chinoise]]
:[[Dictionnaire de philosophie/État de nature|État de nature]]
:[[Dictionnaire de philosophie/Euthanasie|Euthanasie]]
:[[Dictionnaire de philosophie/Existence|Existence]]
:[[Dictionnaire de philosophie/Expérience de pensée|Expérience de pensée]]
;F
:[[Dictionnaire de philosophie/Facticité|Facticité]]
:[[Dictionnaire de philosophie/Finitude|Finitude]]
;G
:[[Dictionnaire de philosophie/Ghana|Ghana]]
;I
:[[Dictionnaire de philosophie/Imagination|Imagination]]
:[[Dictionnaire de philosophie/Individu|Individu]]
:[[Dictionnaire de philosophie/Intelligence animale|Intelligence animale]]
;K
:[[Dictionnaire de philosophie/Pierre Kropotkine|Kropotkine]]
;L
:[[Dictionnaire de philosophie/Julien Offray de La Mettrie|La Mettrie]]
;M
:[[Dictionnaire de philosophie/Karl Marx|Marx]]
:[[Dictionnaire de philosophie/Maurice Merleau-Ponty|Merleau-Ponty]]
:[[Dictionnaire de philosophie/Métaphysique|Métaphysique]]
:[[Dictionnaire de philosophie/Monothéisme|Monothéisme]]
:[[Dictionnaire de philosophie/Morale|Morale]]
:[[Dictionnaire de philosophie/Mort|Mort]]
;N
:[[Dictionnaire de philosophie/Thomas Nagel|Nagel]]
:[[Dictionnaire de philosophie/Friedrich Nietzsche|Nietzsche]]
;P
:[[Dictionnaire de philosophie/Panthéisme|Panthéisme]]
:[[Dictionnaire de philosophie/Personne non-humaine|Personne non-humaine]]
:[[Dictionnaire de philosophie/Philosophie africaine|Philosophie africaine]]
:[[Dictionnaire de philosophie/Polythéisme|Polythéisme]]
:[[Dictionnaire de philosophie/Pyrrhon d'Élis|Pyrrhon d'Élis]]
;Q
:[[Dictionnaire de philosophie/Willard Van Orman Quine|Quine]]
;S
:[[Dictionnaire de philosophie/Scepticisme|Scepticisme]]
:[[Dictionnaire de philosophie/Moritz Schlick|Schlick]]
:[[Dictionnaire de philosophie/Max Stirner|Stirner]]
:[[Dictionnaire de philosophie/Philosophie suédoise contemporaine|Suède]]
:[[Dictionnaire de philosophie/Sujet|Sujet]]
;T
:[[Dictionnaire de philosophie/Théisme|Théisme]]
;U
:[[Dictionnaire de philosophie/Ubuntu|Ubuntu]]
;V
:[[Dictionnaire de philosophie/Vérité|Vérité]]
;W
:[[Dictionnaire de philosophie/Timothy Williamson|Williamson]]
[[Catégorie:Philosophie|*]]
6d82x0z34cn1fz718da130ewpnmuxc9
Catégorie:Pour lire Platon (livre)
14
30835
769267
765026
2026-07-01T04:05:36Z
PandaMystique
119061
769267
wikitext
text/x-wiki
[[Catégorie:Livres par titre]]
[[Catégorie:Histoire de la philosophie]]
[[Catégorie:Philosophie]]
[[Catégorie:Classe 1 - Philosophie et psychologie]]
[[Catégorie:Philosophe]]
s0qqbxgxj00ka7emm53cgj1tq2ftesd
Philosophie/Théorie de la connaissance/Le Problème de Gettier
0
32916
769265
753913
2026-07-01T04:01:11Z
PandaMystique
119061
769265
wikitext
text/x-wiki
''Le problème de Gettier'' est un problème épistémologique exposé par le philosophe [[w:Edmund Gettier|Edmund Gettier]] dans un article de 1963, « Une croyance vraie et justifiée est-elle une connaissance ? » (''Is Justified True Belief Knowledge?''), publié dans la revue ''Analysis''.
Gettier propose dans cet article des contre-exemples à la thèse traditionnelle que nous avons vue dans le chapitre précédent, thèse selon laquelle les conditions d'une croyance vraie et justifiée sont nécessaires et suffisantes pour que cette croyance soit une connaissance. Autrement dit, il cherche à montrer qu’on peut posséder une croyance vraie et bien justifiée sans pour autant posséder de ''connaissance'' au sens strict.
== ''L'Importance d'être Constant'' : deux exemples intuitifs ==
Avant d'en venir au problème de Gettier proprement dit, il est utile de présenter deux exemples classiques qui fournissent un premier aperçu intuitif de la difficulté.
Dans la pièce de théâtre d’[[Oscar Wilde]], ''L'Importance d'être Constant'', Jack ment à Gwendolen en lui disant s'appeler Constant. Or, ce que Jack ignore lui-même, c'est que son vrai prénom ''est'' effectivement Constant. Peut-on dire que Gwendolen, qui ''croit'' que Jack s'appelle Constant, le ''sait'' ?
Nous pouvons dire que Gwendolen a de bonnes raisons de le croire : c'est Jack lui-même qui le lui a dit, et s’informer auprès d’une personne sur son propre prénom est une méthode courante et fiable. Il n’y a là rien d’irrationnel. En outre, ce qu’elle croit est vrai : Jack se prénomme réellement Constant. Cependant, Jack avait l’intention de mentir ; il ne savait pas lui-même que ce prénom était le sien. De ce fait, la « connaissance » de Gwendolen repose sur un concours de circonstances tout à fait fortuit. Dans ces conditions, peut-on vraiment dire qu’elle ''sait'' que le prénom de Jack est Constant ? Intuitivement, nous sommes tentés de répondre non : Gwendolen a bien une croyance vraie et raisonnable, mais cette vérité semble relever de la chance.
Bertrand Russell propose un exemple du même type : une horloge s'est arrêtée, et, vingt-quatre heures plus tard, je la regarde, ignorant qu'elle ne fonctionne plus, pour connaître l'heure. L'horloge m'indique l'heure qu'il est effectivement, puisque je la consulte exactement vingt-quatre heures après qu'elle s’est arrêtée. Pourtant, là encore, il s’agit d’une pure coïncidence : mon indication de l’heure est correcte, mais elle l’est pour de mauvaises raisons. Est-ce que je ''sais'' vraiment l'heure qu'il est ?
Ces cas, que l’on peut qualifier de « pré-gettieriens », suggèrent déjà qu’il peut exister des croyances vraies et raisonnablement soutenues qui, pourtant, ne méritent pas le nom de ''connaissance''. Ils ouvrent la question centrale : suffit-il qu’une croyance soit à la fois vraie et bien justifiée pour qu’elle soit une connaissance, ou faut-il ajouter d’autres exigences pour éliminer ce genre de coïncidences heureuses ?
== La connaissance comme croyance vraie et justifiée ==
''Pour plus de détails voir :'' [[Philosophie/Théorie de la connaissance/Une définition traditionnelle|Une définition traditionnelle de la connaissance]].
Selon la définition dite « traditionnelle », avoir une connaissance de quelque chose signifie que ce quelque chose est vrai, que l’on croit que c’est vrai et que cette croyance est justifiée. Par conséquent, connaître, c’est avoir une ''croyance vraie et justifiée''.
Prenons, pour illustrer et comprendre cette thèse, la proposition :
:La Terre est ronde.
Si cette proposition est vraie, si je crois qu'elle est vraie et si j'ai de bonnes raisons de le croire (par exemple, des voyageurs en ont fait le tour, il existe des photographies de la Terre depuis l’espace, les lois de la gravitation expliquent sa forme, etc.), alors il semble légitime de dire que je ''sais'' que la Terre est ronde.
Gettier propose de cette thèse une présentation formelle, c'est-à-dire une présentation où les termes sont remplacés par des lettres, ce qui permet de mieux mettre en évidence le caractère général de la thèse. En remplaçant le sujet par la lettre ''S'' (pour dire que l'on parle de n'importe quel sujet qui peut croire et savoir), et l'énoncé qui est cru par la lettre ''p'' (pour dire que l'on parle de n'importe quelle proposition pouvant être vraie ou fausse), Gettier écrit :
S sait que p, si et seulement si :
# p est vrai ;
# S croit que p ;
# S est justifié à croire que p.
Ces trois points sont, pris ensemble, des conditions dites ''nécessaires'' et ''suffisantes''.
Elles sont '''nécessaires''' parce que l'on ne peut pas s'en passer pour qu'une croyance soit de la connaissance ; elles sont supposées '''suffisantes''' parce qu’elles suffiraient, à elles seules, pour transformer une croyance en connaissance : il n’y aurait besoin de rien d'autre que ces trois conditions.
Cette conception de la connaissance est partagée, selon Gettier, par des auteurs comme [[w:Alfred Ayer|Alfred Ayer]] ou Roderick Chisholm, et elle est souvent attribuée, de manière discutable, à Platon. Sur ce dernier point, il est en réalité difficile de suivre Gettier, car Platon rejette explicitement cette conception dans le ''Théétète''. Mais cette dispute historique n’a pas d’importance décisive pour la compréhension du problème lui-même.
=== Pourquoi les trois conditions sont nécessaires ===
Les trois conditions sont nécessaires, parce que si l'une d'elles n'est pas remplie, on ne peut pas parler de connaissance.
Cela est évident pour le premier point : il serait contradictoire de dire que « savoir que p » est une forme de connaissance, alors que p est faux. Par exemple, si je crois que la Terre est plate et que la Terre ne l’est pas, ce que je crois n'est pas un savoir, mais une erreur. Donc, si je crois que p est vrai et si p est faux, alors je ne ''sais'' pas que p.
La deuxième condition présente la même évidence. Si « la Terre est ronde » est une proposition vraie, mais que je ne crois pas qu’elle le soit, je n’ai pas de connaissance, mais je suis dans l’ignorance ou dans la suspension de jugement. Une vérité que je ne reconnais pas ne devient pas pour autant un savoir que je posséderais.
La troisième condition est plus subtile. Si « la Terre est ronde » est une proposition vraie, et si je crois qu'elle est vraie, je peux malgré tout ne pas être justifié à le croire, si mes raisons sont mauvaises. Par exemple, je crois que la Terre est ronde parce que je crois que c’est ainsi que le Grand Bélier primordial l’a créée, et je n’ai aucune raison sérieuse d’accorder foi à cette croyance cosmologique. S’il l’avait créée autrement, je n’aurais pas cru que la Terre est ronde, quand bien même il est vrai qu’elle l’est. Autrement dit, si mes raisons de croire sont inappropriées ou fausses, elles ne permettent pas vraiment d'''expliquer'' pourquoi ma croyance est vraie ; sa vérité relève alors de la coïncidence, même si, par chance, la proposition à laquelle je crois est exacte.
Pour que ma croyance soit justifiée, je dois donc pouvoir donner un ''bon'' récit de la manière dont je suis parvenu à cette croyance et montrer en quoi ce récit rend plausible sa vérité : elle ne doit pas être tenue simplement de la rumeur, de traditions infondées ou de ouï-dire. Cela suppose de recourir à d'autres croyances, provenant par exemple d'une expérience directe ou indirecte (p. ex. je crois que je suis né à tel endroit parce que mes parents me l’ont dit et que des documents le confirment), ou encore à un ensemble de propositions vraies et justifiées (par exemple une théorie scientifique) à partir desquelles ma croyance peut être déduite à bon droit ou dont elle est une bonne conséquence.
Jusqu’ici, rien ne semble contredire l’idée que « connaissance = croyance vraie justifiée ». C’est ce socle que les contre-exemples de Gettier vont faire vaciller.
== Contre-exemples ==
Ce que Gettier remet en cause, ce n’est pas le caractère nécessaire des trois conditions, mais leur ''suffisance''. Affirmer qu’elles sont suffisantes revient à dire que, dès qu’elles sont remplies, on est obligé de considérer la croyance comme une connaissance, et qu’il n’est besoin d’aucune condition supplémentaire. Donc, si les trois conditions énoncées dans la section précédente sont satisfaites, toute croyance vraie et justifiée devrait être une connaissance.
Voyons maintenant l'insuffisance de ces conditions avec le premier contre-exemple proposé par Gettier.
Smith et Jones sont tous les deux candidats à un certain emploi. Smith a de bonnes raisons de croire que :
1. Jones est celui qui sera embauché, car le directeur de l'entreprise le lui a dit ;<br>
2. Jones a dix pièces dans sa poche, car Smith les a comptées.
À partir de 1) et 2), Smith peut donc en déduire (de manière apparemment légitime) que :
:3) Celui qui sera embauché a dix pièces dans sa poche.
Mais supposons que la situation réelle soit la suivante :
:Smith est finalement embauché ;
:Smith a lui aussi, mais sans le savoir, dix pièces dans sa poche.
Il est alors toujours vrai que :
:Celui qui sera embauché a dix pièces dans sa poche.
Dans cet exemple, la proposition 3 est vraie, Smith croit qu'elle est vraie et a de bonnes raisons (par 1 et 2) de la croire vraie ; cependant, il semble clair que Smith ne ''sait'' pas que la proposition 3 est vraie. Sa croyance est vraie et justifiée, mais elle est vraie ''par hasard'' : elle repose sur une prémisse fausse (que Jones sera embauché), et c’est seulement par coïncidence que cette déduction aboutit à une vérité.
On dit parfois que les cas de Gettier reposent sur une ''justification défectueuse'' : le sujet raisonne correctement, mais à partir d’au moins une croyance fausse. Le résultat de ce raisonnement peut être vrai, mais pour de mauvaises raisons.
Revenons à présent aux deux exemples de la première section, et appliquons-leur la formalisation de Gettier, pour voir s’ils entrent dans ce schéma.
Gwendolen sait que le prénom de Jack est Constant, si et seulement si :
# Il est vrai que le prénom de Jack est Constant.
# Gwendolen croit qu'il est vrai que le prénom de Jack est Constant.
# Gwendolen est justifiée à croire que le prénom de Jack est Constant, car Jack le lui a dit.
Je sais l'heure qu'il est (admettons qu'il soit 14 heures), si et seulement si :
# Il est vrai qu'il est 14 heures.
# Je crois qu'il est vrai qu'il est 14 heures.
# Je suis justifié à croire qu'il est 14 heures, car il est raisonnable de regarder une horloge pour connaître l'heure.
On voit que les deux exemples correspondent parfaitement à cette conception de la connaissance. Toutes les conditions sont remplies : la croyance est vraie, elle est crue, et elle semble raisonnablement soutenue par de bonnes raisons. Pourtant, comme pour le cas de Smith, il paraît difficile de considérer que la croyance de Gwendolen ou la mienne à propos de l’heure soit une véritable connaissance. Dans les deux cas, la vérité de la croyance est liée à un heureux hasard : c’est ''accidentellement'' que la croyance vraie coïncide avec la réalité.
À la suite de la publication de l'article de Gettier, il est apparu qu'il existe de nombreux « cas de Gettier », soit que ces cas soient laborieusement inventés par des philosophes (et, dans ce cas, il faut avouer qu'ils sont parfois quelque peu tirés par les cheveux, même s'ils restent possibles), soit qu'ils puissent se présenter de manière tout à fait vraisemblable dans la vie quotidienne, comme l'exemple de l'horloge. En réalité, il n'est pas difficile de fabriquer ce genre de scénarios : il suffit que le sujet raisonne correctement à partir d’une prémisse fausse, et que, par une coïncidence heureuse, la conclusion à laquelle il parvient soit néanmoins vraie.
== Bilan : que nous apprend le problème de Gettier ? ==
Le problème de Gettier réfute la conception classique de la connaissance, au sens où il montre que la triple condition « croyance vraie justifiée » n’est pas suffisante. Les difficultés qu’il met en lumière ont engendré une abondante littérature en [[épistémologie]] contemporaine.
La leçon minimale à en tirer est la suivante : même si une croyance est vraie, sincèrement tenue, et appuyée sur des raisons qui paraissent bonnes au sujet, il peut toujours être légitime de dire qu’elle ne constitue pas encore une ''connaissance''. Il y a quelque chose de plus dans la connaissance qui manque dans les cas de Gettier, et ce « quelque chose » a souvent été décrit comme l’absence de ''chance épistémique'' : dans un véritable savoir, la vérité de la croyance ne doit pas être le fruit d’un hasard heureux.
Que faire alors de la condition de justification ? Faut-il la réviser — et, dans ce cas, de quelle manière ? — ou doit-on ajouter une (ou plusieurs) nouvelle(s) condition(s) afin de rendre l'ensemble des conditions véritablement suffisantes ?
Les réponses proposées dans la littérature se répartissent schématiquement en plusieurs grandes familles :
* Certaines tentatives modifient la troisième condition en exigeant, par exemple, que la justification ne passe par aucune prémisse fausse (théories dites « sans prémisses fausses ») ou qu’elle soit « non trompée ».
* D’autres ajoutent une condition supplémentaire, par exemple que la croyance soit reliée de manière ''causale'' au fait qu’elle énonce (théories causales de la connaissance), ou que la méthode par laquelle on forme la croyance soit généralement fiable (fiabilisme).
* D’autres encore abandonnent l’idée même que la connaissance soit un simple « paquet » de conditions sur la croyance, et la pensent plutôt comme une capacité, une compétence, ou une relation plus riche entre le sujet et le monde.
Il n’y a pas de consensus définitif sur la « bonne » solution. Ce qui fait l’importance durable du problème de Gettier, c’est moins la forme technique de ses exemples que la mise à nu d’une tension profonde : nous voulons, d’un côté, une conception de la connaissance qui tienne compte de nos raisons et de nos justifications, mais, de l’autre, nous refusons de considérer comme ''savoir'' des croyances vraies qui doivent trop à la chance.
== Exercices ==
* Dans ce chapitre, qu'est-ce que nous tenons pour vrai ?
# un savoir ?
# des propositions ?
# des croyances ?
* Une croyance vraie et justifiée peut-elle, dans certains cas, ne pas être de la connaissance ? Expliquez en vous appuyant sur un exemple (ou en inventant un cas de type Gettier).
* À quelles conditions sommes-nous justifiés à tenir une croyance pour vraie ? Ces conditions suffisent-elles pour écarter tout rôle du hasard ?
* Peut-on définir la connaissance comme simple croyance vraie et supprimer ainsi la troisième condition (la justification) ? Que deviendraient alors les cas de Gettier ?
== Bibliographie ==
* Edmund L. Gettier, « Is Justified True Belief Knowledge? », ''Analysis'', vol. 23, n° 6, 1963, p. 121-123.
* Edmund L. Gettier, « Une croyance vraie et justifiée est-elle une connaissance ? », trad. fr. in [[w:Frédéric Nef|Julien Dutant]] & [[w:Pascal Engel|Pascal Engel]] (dir.), ''Philosophie de la connaissance'', Paris, Vrin, 2005.
* Matthias Steup, ''An Introduction to Contemporary Epistemology'', Upper Saddle River, Prentice-Hall, 1996.
== Ressources ==
=== Texte de Gettier ===
* ({{en}}) [http://www.ditext.com/gettier/gettier.html "Is Justified True Belief Knowledge?"], texte anglais
* ({{fr}}) [http://julien.dutant.free.fr/ph316_2002/Gettier1963fr.doc ''Une croyance vraie et justifiée est-elle une connaissance ?''], traduction française par J. Dutant [http://julien.dutant.free.fr/ph316_2002/ sur son site]
=== Exposés ===
Le problème de Gettier a été exposé un nombre incalculable de fois. Citons :
* {{Sc|Steup}}, Matthias, ''An Introduction to Contemporary Epistemology'', 1996
===Articles ===
* « [http://www.iep.utm.edu/gettier/ Gettier Problems] », Stephen Hetherington, 2005
* {{pdf}} Julien Dutant, [http://philosophie-en-ligne.fr/klesis/Dutant-Klesis.pdf « Pourquoi le problème de Gettier est-il si important ? »], revue Klesis, n° 9, 2008
[[Catégorie:Théorie de la connaissance (livre)]]
58dcyxclfxrg5ol9d9mbelra9vcmll1
Philosophie/Théorie de la connaissance
0
55358
769255
411963
2026-07-01T03:51:57Z
PandaMystique
119061
769255
wikitext
text/x-wiki
La '''théorie de la connaissance''', ou philosophie de la connaissance, parfois assimilée à l'épistémologie, est la partie de la philosophie qui étudie la nature, les origines, les contenus, les moyens et les limites de la connaissance.
Les différents chapitres sont indépendants les uns des autres, même s'ils se suivent avec une certaine logique. Des éléments sont répétés d'un chapitre à l'autre, mais présentés de manière différente.
=== Sommaire ===
# Qu'est-ce que la connaissance ?
## [[/Une définition traditionnelle|Une définition traditionnelle]] {{3/4}}
## [[Philosophie/Théorie de la connaissance/Le Problème de Gettier|Le Problème de Gettier]] {{3/4}}
# Nature de la justification
## Fondationalisme vs. cohérentisme
## Internalisme vs. externalisme
#Étendue de la connaissance
## Les Sources de la connaissance
## Le Scepticisme
[[Catégorie:Théorie de la connaissance]]
hczm9yb580hq17it2ij87udf65k3lzj
769260
769255
2026-07-01T03:59:12Z
PandaMystique
119061
769260
wikitext
text/x-wiki
La '''théorie de la connaissance''', ou philosophie de la connaissance, parfois assimilée à l'épistémologie, est la partie de la philosophie qui étudie la nature, les origines, les contenus, les moyens et les limites de la connaissance.
Les différents chapitres sont indépendants les uns des autres, même s'ils se suivent avec une certaine logique. Des éléments sont répétés d'un chapitre à l'autre, mais présentés de manière différente.
=== Sommaire ===
# Qu'est-ce que la connaissance ?
## [[/Une définition traditionnelle|Une définition traditionnelle]] {{3/4}}
## [[Philosophie/Théorie de la connaissance/Le Problème de Gettier|Le Problème de Gettier]] {{3/4}}
# Nature de la justification
## Fondationalisme vs. cohérentisme
## Internalisme vs. externalisme
#Étendue de la connaissance
## Les Sources de la connaissance
## Le Scepticisme
[[Catégorie:Théorie de la connaissance (livre)]]
hznkrgrlty4morw97r21651gj2h4tpm
769264
769260
2026-07-01T04:00:48Z
PandaMystique
119061
769264
wikitext
text/x-wiki
La '''théorie de la connaissance''', ou philosophie de la connaissance, parfois assimilée à l'épistémologie, est la partie de la philosophie qui étudie la nature, les origines, les contenus, les moyens et les limites de la connaissance.
Les différents chapitres sont indépendants les uns des autres, même s'ils se suivent avec une certaine logique. Des éléments sont répétés d'un chapitre à l'autre, mais présentés de manière différente.
=== Sommaire ===
# Qu'est-ce que la connaissance ?
## [[/Une définition traditionnelle|Une définition traditionnelle]] {{3/4}}
## [[Philosophie/Théorie de la connaissance/Le Problème de Gettier|Le Problème de Gettier]] {{3/4}}
# Nature de la justification
## Fondationalisme vs. cohérentisme
## Internalisme vs. externalisme
#Étendue de la connaissance
## Les Sources de la connaissance
## Le Scepticisme
[[Catégorie:Théorie de la connaissance (livre)|*]]
bhk0z704m5dymfdvhu5a6kvvlj956dn
Philosophie/Théorie de la connaissance/Une définition traditionnelle
0
55369
769262
415064
2026-07-01T04:00:14Z
PandaMystique
119061
769262
wikitext
text/x-wiki
Dans ce chapitre, nous commencerons par distinguer différentes sortes de connaissance ; nous verrons ensuite que la connaissance propositionnelle est la forme de connaissance essentielle en théorie de la connaissance, et nous expliquerons chacun des points de la définition traditionnelle de cette sorte de connaissance.
== Trois formes de connaissance ==
Toutes les formes de connaissance ne font pas également l'objet de l'attention des philosophes. En suivant des auteurs comme {{sc|Steup}} et {{sc|Lehrer}}, nous distinguerons trois sortes de connaissance considérées comme les plus importantes, et nous verrons ensuite quelle sorte de connaissance est le plus souvent étudiée.
On peut les exprimer par ces trois phrases :
* Jean connaît le Président de la République.
* Jean sait faire du vélo.
* Jean sait que Paris est la capitale de la France.
La première phrase exprime une connaissance par « acquaintance » (ou directe), la deuxième un « savoir comment » (ou savoir faire) et la dernière une connaissance propositionnelle (« savoir que »).
<u>''Remarque''</u> : vous pouvez voir que nous utilisons tout autant le verbe « connaître » que le verbe « savoir ». Nous ne ferons pas ici de distinctions entre ces mots, et nous nous concentrerons uniquement sur les sens du mot « connaissance » : lorsque nous utilisons « savoir » ou « connaître », c'est toujours cette notion que nous avons en vue.
* « Savoir comment » signifie avoir les compétences pour faire quelque chose : Jean sait faire du vélo, c'est une capacité, une aptitude.
* La connaissance par « acquaintance », c'est par exemple le fait de connaître une personne par une relation directe, et non par la description que l'on m'en fait.
* La connaissance propositionnelle est une forme d'information ({{sc|Lehrer}}) que je possède à propos de quelque chose.
Les philosophes s'intéressent principalement à cette troisième forme de connaissance, mais, avant de l'examiner, nous allons formuler quelques remarques sur ce qui distingue ou rapproche ces différents sens.
=== Connaissance directe et connaissance propositionnelle ===
La distinction entre ces deux formes de connaissance ne paraît pas toujours évidente. Quand on considère des réalités comme une ville et que l'on dit : « je connais Paris », on voit qu'il y a là deux sens possibles. D'un côté, je connais Paris car j'y vis ou l'ai visitée ; de l'autre, je sais que cette ville existe, où elle se trouve, etc. sans jamais y avoir été. Mais connaître Paris au premier sens, cela n'implique-t-il pas d'en avoir une connaissance propositionnelle ? Le fait d'avoir vu la tour Eiffel nous permet incontestablement de former des connaissances propositionnelles sur sa forme, ses couleurs, etc. Mais ces mêmes connaissances auraient pu nous être transmises par quelqu'un ou par un livre. En outre, je peux aussi apprendre dans un livre des connaissances que la connaissance directe ne me donne pas, comme la hauteur précise de la tour Eiffel. On voit donc que connaissance propositionnelle et connaissance directe ne s'impliquent pas toujours l'une l'autre.
Prenons encore un exemple pour mieux voir la grande différence qu'il y a entre ces deux formes de connaissance. Je peux savoir beaucoup de choses sur une personne, sans l'avoir jamais rencontrée. Je sais par exemple que Jules César est né en 100 avt. J.C., qu'il était Romain, mais je ne le connais pas personnellement. Je possède donc un grand nombre de propositions vraies sur César, mais sa connaissance directe est impossible. Dans le langage de tous les jours, nous y avons fait allusion, nous confondons parfois ces deux sens : quand nous disons que nous connaissons quelqu'un, cela peut vouloir dire que nous le fréquentons ou que nous en avons entendu parlé (par exemple, par quelqu'un d'autre ou dans des livres).
Dans le cadre de cette introduction, nous ne ferons pas une étude détaillée des relations entre ces deux genres de connaissance. Mais les éléments que nous avons exposés permettent déjà de voir toute l'importance de cette distinction. Par une connaissance directe, je vois que le soleil se meut mais pas la Terre ; par une connaissance propositionnelle, je sais que cette connaissance directe n'est en fait pas une connaissance, mais une erreur. De manière similaire, nous pensons souvent que la connaissance directe est suffisante pour nous former une idée correcte de la réalité. Notre exemple montre que ce n'est pas le cas, et c'est l'une des raisons qui expliquent pourquoi les philosophes vont surtout s'intéresser à la connaissance propositionnelle dans le cadre de la théorie de la connaissance.
=== Savoir comment et connaissance propositionnelle ===
Il est intéressant de noter qu'il existe des cas où un « savoir comment » n'implique pas une capacité. Par exemple, je suis pianiste et je joue telle sonate pour piano de Beethoven. Mon ami violoniste, qui est un musicien talentueux mais qui n'est pas pianiste, peut me donner des conseils sur la manière de jouer cette sonate. En tant que pianiste, je sais comment jouer cette sonate : j'ai les compétences techniques pour le faire ; mon ami violoniste sais aussi comment jouer cette sonate, mais il n'a pas le même « savoir comment » que moi : il n'est pas pianiste, mais il a des connaissances propositionnelles sur la manière d'interpréter cette sonate.
Nous avons donc là deux façons de « savoir comment », et elle ne s'impliquent pas l'une autre. Un enfant qui apprend à marcher n'a aucune connaissance sur les processus physiologiques qui rendent possibles la marche.
Ces quelques remarques montrent que les différents sens du mot « connaissance » ne sont pas nécessairement exclusifs ou juxtaposés les uns à côté des autres ; certaines connaissances en impliquent d'autres, mais ce n'est pas toujours le cas. Il faut donc être très attentif quand on parle des différentes sortes de connaissance, car on peut facilement passer à côté d'une forme de connaissance ou la confondre avec une autre.
== La connaissance propositionnelle ==
Nous allons à présent examiner une définition de la connaissance que l'on qualifie souvent de traditionnelle et qui est un lieu commun en théorie de la connaissance<ref>{{sc|BonJour}}, p. 4.</ref>.
=== Une définition traditionnelle ===
Une personne sait que P si, et seulement si :
# elle croit que P est vrai ;
# P est vrai ;
# elle est justifiée à croire que P est vrai.
Chacun de ces points est une condition nécessaire pour qu'il y ait connaissance, c'est-à-dire que si l'une des conditions est absente, il n'y a pas de connaissance. C'est ce que nous allons montrer dans cette partie.
Ces conditions font toutes l'objet de discussions à divers degrés, mais c'est surtout la justification qui pose des problèmes particulièrement difficiles à résoudre. Malgré ces discussions, cette définition reste pour la plupart des auteurs une définition « approximativement correcte » ({{sc|BonJour}}) de la connaissance propositionnelle.
=== Croyance ===
Pour savoir que les arbres dans la cour devant chez moi sont des peupliers, je dois tout d'abord avoir la croyance que ces arbres sont des peupliers. En effet, affirmer à la fois « Je ne crois pas que ces arbres sont des peupliers » et « Je sais que ces arbres sont des peupliers » apparaît contradictoire. Ce point ne fait guère l'objet de polémique, même s'il existe des tentatives pour le mettre en défaut.
La croyance est ce que l'on appelle une ''attitude propositionnelle'', c'est-à-dire une relation entre un sujet et une proposition. Il existe toutes sortes d'attitudes propositionnelles en plus des croyances : je peux par exemple considérer une proposition (« la Terre a des ailes »), sans y croire. Le sujet pense cette proposition (P) : il pense que P, sans croire que P soit vraie ou fausse. On peut également dire que P (je dis que la Terre a des ailes) ou désirer que P.
Or, pour une croyance, on dira qu'une personne croit que P ''est vraie''. Pour distinguer la croyance des autres attitudes propositionnelles nous dirons donc que ''la croyance consiste à tenir quelque chose pour vrai.'' Ainsi, savoir quelque chose, c'est le tenir pour vrai.
Mais nous pouvons tenir quelque chose pour plus ou moins vrai. Le degré d'une croyance est donc un problème à considérer, en distinguant par exemple opinion, avis, sentiment que, etc. Pour {{sc|BonJour}}, il s'agit ici de tenir pour vraie une proposition avec une certaine assurance, c'est-à-dire qu'il faut que cette croyance soit plus qu'une vague opinion, même si une certitude absolue n'est sans doute pas requise.
Mais nous ne proposerons pas ici de discussion détaillée de ces points : il nous suffit pour le moment de voir que l'on ne peut connaître sans croire.
=== Vérité ===
{{Loupe|Vérité}}
Comme pour la notion de croyance, nous n'allons pas nous engager dans une discussion détaillée des théories sur la nature de la vérité : elles sont nombreuses et souvent difficiles. Mais dans le cadre d'une introduction, nous allons le voir, ce ne sera pas vraiment un problème pour expliquer la deuxième condition de notre définition.
Reprenons notre exemple : je crois que les arbres dans ma cour sont des peupliers ; or, il se trouve que ces arbres ne sont pas des peupliers. Nous voyons bien, dans ce cas, que je ne sais pas que ces arbres sont des peupliers : ma croyance est fausse car elle ne correspond pas à la réalité, et une croyance fausse n'est pas une connaissance.
* Je crois que P est vrai ;
* P est faux ;
* « P est vrai » n'est pas une connaissance.
* Ma croyance que P est vrai n'est pas une connaissance.
Cet exemple anodin suppose que ma croyance est vraie quand elle ''correspond'' à un fait ou quand elle décrit une certaine réalité telle qu'elle est, et qu'elle est fausse dans le cas contraire. L'exemple suppose donc une certaine idée de la nature de la vérité(la ''correspondance''). Bien que cette idée soit problématique, notre exemple est suffisant pour montrer que je sais quelque chose si, et seulement si, ma croyance est vraie, quelle que soit l'idée que l'on se fait de la vérité ; en effet, une croyance fausse n'est pas une connaissance.
=== Justification===
{{Loupe|Le Problème de Gettier}}
Croyance et vérité, nos deux premières conditions, ne suffisent pas à produire la connaissance. Nous emprunterons à Bertrand Russell quelques exemples pour le montrer.
'''Premier exemple :'''
: « Si un journal, par une anticipation intelligente, annonce le résultat dune bataille avant qu'ait été reçu aucun télégramme donnant le résultat, il peut par chance annoncer ce qui se trouve ensuite être le résultat juste, et produire une croyance chez quelques uns de ses lecteurs les moins expérimentés. Mais bien que leur croyance soit vraie, on ne peut pas dire qu'ils aient une connaissance. »
'''Deuxième exemple :'''
:« Si je sais que tous les Grecs sont des hommes et que Socrate était un homme, et que j'en infère que Socrate était un Grec, on ne peut pas dire que je sache que Socrate était un Grec, parce que, bien que mes prémisses et ma conclusion soient vraies, la conclusion ne suit pas des prémisses. »
On le voit, la manière dont sont formées les croyances vraies, dans ces deux exemples, est inappropriée. Toutes les croyances vraies ne sont donc pas des connaissances, et s'il en est ainsi c'est parce que la ''justification'' de certaines croyances vraies n'est pas appropriée. De ce fait, toutes les connaissances seront des croyances vraies ''justifiées'' d'une certaine façon. C'est notre troisième et dernière condition : je dois avoir une croyance justifiée de manière appropriée pour que cette croyance soit une connaissance.
Si j'ai une croyance et que cette croyance est vraie par ''chance'' ou ''hasard'', comme dans nos deux exemples, ce n'est pas une connaissance : ainsi, un raisonnement faux qui conduit à une conclusion vraie, un concours de circonstance, mais aussi une conviction arbitraire, une supposition faite au hasard, un pressentiment, etc. ne sont pas des justifications appropriées. La question est de savoir ce qu'est une justification appropriée, et plusieurs réponses très discutées ont été apportées à cette question. Nous aurons l'occasion d'y revenir dans le prochain chapitre, mais nous pouvons dès à présent tenter d'éclairer un peu cette notion.
Selon {{sc|BonJour}}, la justification dont nous avons besoin est d'ordre épistémique, c'est-à-dire relative à la connaissance. Ce que nous proposons d'examiner ici, c'est comment une justification épistémique se distingue d'autres genres de justifications. Nous pouvons justifier une croyance par des valeurs morales, par des raisons théologiques, mais ce ne sont apparemment pas là des justifications épistémiques, c'est-à-dire que ce ne sont pas des justifications appropriées pour connaître.
{{sc|BonJour}} propose l'exemple suivant pour bien saisir la différence qu'il peut y avoir entre ces formes de justifications : un ami qui m'a aidé par le passé lorsque j'étais dans une situation difficile est accusé d'un crime horrible. Tout le monde le pense coupable. Supposons que je ne dispose personnellement d'aucun indice et que mon ami me connaisse assez pour savoir qu'un mensonge de sa part ne passerait pas inaperçu. Je suis justifié dans ce cas à le croire innocent, et c'est même pour moi une obligation ''morale''. Pourtant, je ne sais pas s'il est ou non innocent, je suis seulement justifié ''moralement'' à le croire : mes raisons peuvent être très bonnes, elles ne sont pas épistémiques.
Ce qui distingue dès lors une justification épistémique d'une justification morale, c'est le ''souci de la vérité''. Les justifications de croire mon ami innocent ne sont pas une bonne manière de parvenir à la vérité : si je suis dans le vrai à son sujet, ce n'est pas pour de bonnes raisons, mais par hasard. La justification épistémique est donc une attitude particulière à l'égard de certaines de nos croyances : nous voulons qu'elles décrivent correctement la réalité. Dès lors, la fonction de cette sorte de justification est d'être un instrument pour attendre notre but, qui est la vérité.
Pour terminer sur ces distinctions, on peut tenir le même raisonnement avec des croyances religieuses : une croyance religieuse fondée sur des textes et des traditions, qui se trouverait vraie, n'est pas une connaissance, parce qu'elle n'est pas épistémologiquement justifiée.
== Pour finir ==
Il est important de rappeler qu'il ne s'agit ici que d'une introduction : chaque point a été formulé de manière aussi simple et courte que possible, et nous n'avons fait dans ce but que reprendre les exposés qui se trouvent dans les livres donnés en bibliographie. Si cette introduction se veut simple, il ne s'agit pas pour autant d'une simplification : les termes et arguments employés sont aussi ''précis'' que possible pour une introduction, mais ils sont ''insuffisants'' pour en discuter dans le détail.
== Bibliographie ==
Tous les livres de cette section ont été utilisés pour la rédaction de ce chapitre. Ce sont majoritairement des ouvrages anglophones, mais il n'est pas nécessaire d'avoir une parfaite connaissance de l'anglais pour les lire et les bien comprendre : il n'y a pas de jargon, le vocabulaire est assez restreint et le style est avant tout argumentatif.
* {{sc|BonJour}}, Laurence, ''The Structure of Empirical Knowledge'', 1983
* {{Sc|Chisholm}}, Roderick, ''Theory of Knowledge'', 3rd edition, 1989
* {{Sc|Lehrer}}, Keith, ''Theory of Knowledge'', 2nd ed., 2000
* {{Sc|Lemos}}, Noah, ''An Introduction to the Theory of Knowledge'', 2007
* {{Sc|Steup}}, Matthias, ''An Introduction to Contemporary Epistemology'', 1996
* {{Sc|Russell}}, Bertrand, ''Les Problèmes de la philosophie'', 1912
==Références==
<references/>
Catégorie:Théorie de la connaissance (livre)
6v630y8c8bd2u5ppqs0nykfu0sm4tf2
769263
769262
2026-07-01T04:00:31Z
PandaMystique
119061
769263
wikitext
text/x-wiki
Dans ce chapitre, nous commencerons par distinguer différentes sortes de connaissance ; nous verrons ensuite que la connaissance propositionnelle est la forme de connaissance essentielle en théorie de la connaissance, et nous expliquerons chacun des points de la définition traditionnelle de cette sorte de connaissance.
== Trois formes de connaissance ==
Toutes les formes de connaissance ne font pas également l'objet de l'attention des philosophes. En suivant des auteurs comme {{sc|Steup}} et {{sc|Lehrer}}, nous distinguerons trois sortes de connaissance considérées comme les plus importantes, et nous verrons ensuite quelle sorte de connaissance est le plus souvent étudiée.
On peut les exprimer par ces trois phrases :
* Jean connaît le Président de la République.
* Jean sait faire du vélo.
* Jean sait que Paris est la capitale de la France.
La première phrase exprime une connaissance par « acquaintance » (ou directe), la deuxième un « savoir comment » (ou savoir faire) et la dernière une connaissance propositionnelle (« savoir que »).
<u>''Remarque''</u> : vous pouvez voir que nous utilisons tout autant le verbe « connaître » que le verbe « savoir ». Nous ne ferons pas ici de distinctions entre ces mots, et nous nous concentrerons uniquement sur les sens du mot « connaissance » : lorsque nous utilisons « savoir » ou « connaître », c'est toujours cette notion que nous avons en vue.
* « Savoir comment » signifie avoir les compétences pour faire quelque chose : Jean sait faire du vélo, c'est une capacité, une aptitude.
* La connaissance par « acquaintance », c'est par exemple le fait de connaître une personne par une relation directe, et non par la description que l'on m'en fait.
* La connaissance propositionnelle est une forme d'information ({{sc|Lehrer}}) que je possède à propos de quelque chose.
Les philosophes s'intéressent principalement à cette troisième forme de connaissance, mais, avant de l'examiner, nous allons formuler quelques remarques sur ce qui distingue ou rapproche ces différents sens.
=== Connaissance directe et connaissance propositionnelle ===
La distinction entre ces deux formes de connaissance ne paraît pas toujours évidente. Quand on considère des réalités comme une ville et que l'on dit : « je connais Paris », on voit qu'il y a là deux sens possibles. D'un côté, je connais Paris car j'y vis ou l'ai visitée ; de l'autre, je sais que cette ville existe, où elle se trouve, etc. sans jamais y avoir été. Mais connaître Paris au premier sens, cela n'implique-t-il pas d'en avoir une connaissance propositionnelle ? Le fait d'avoir vu la tour Eiffel nous permet incontestablement de former des connaissances propositionnelles sur sa forme, ses couleurs, etc. Mais ces mêmes connaissances auraient pu nous être transmises par quelqu'un ou par un livre. En outre, je peux aussi apprendre dans un livre des connaissances que la connaissance directe ne me donne pas, comme la hauteur précise de la tour Eiffel. On voit donc que connaissance propositionnelle et connaissance directe ne s'impliquent pas toujours l'une l'autre.
Prenons encore un exemple pour mieux voir la grande différence qu'il y a entre ces deux formes de connaissance. Je peux savoir beaucoup de choses sur une personne, sans l'avoir jamais rencontrée. Je sais par exemple que Jules César est né en 100 avt. J.C., qu'il était Romain, mais je ne le connais pas personnellement. Je possède donc un grand nombre de propositions vraies sur César, mais sa connaissance directe est impossible. Dans le langage de tous les jours, nous y avons fait allusion, nous confondons parfois ces deux sens : quand nous disons que nous connaissons quelqu'un, cela peut vouloir dire que nous le fréquentons ou que nous en avons entendu parlé (par exemple, par quelqu'un d'autre ou dans des livres).
Dans le cadre de cette introduction, nous ne ferons pas une étude détaillée des relations entre ces deux genres de connaissance. Mais les éléments que nous avons exposés permettent déjà de voir toute l'importance de cette distinction. Par une connaissance directe, je vois que le soleil se meut mais pas la Terre ; par une connaissance propositionnelle, je sais que cette connaissance directe n'est en fait pas une connaissance, mais une erreur. De manière similaire, nous pensons souvent que la connaissance directe est suffisante pour nous former une idée correcte de la réalité. Notre exemple montre que ce n'est pas le cas, et c'est l'une des raisons qui expliquent pourquoi les philosophes vont surtout s'intéresser à la connaissance propositionnelle dans le cadre de la théorie de la connaissance.
=== Savoir comment et connaissance propositionnelle ===
Il est intéressant de noter qu'il existe des cas où un « savoir comment » n'implique pas une capacité. Par exemple, je suis pianiste et je joue telle sonate pour piano de Beethoven. Mon ami violoniste, qui est un musicien talentueux mais qui n'est pas pianiste, peut me donner des conseils sur la manière de jouer cette sonate. En tant que pianiste, je sais comment jouer cette sonate : j'ai les compétences techniques pour le faire ; mon ami violoniste sais aussi comment jouer cette sonate, mais il n'a pas le même « savoir comment » que moi : il n'est pas pianiste, mais il a des connaissances propositionnelles sur la manière d'interpréter cette sonate.
Nous avons donc là deux façons de « savoir comment », et elle ne s'impliquent pas l'une autre. Un enfant qui apprend à marcher n'a aucune connaissance sur les processus physiologiques qui rendent possibles la marche.
Ces quelques remarques montrent que les différents sens du mot « connaissance » ne sont pas nécessairement exclusifs ou juxtaposés les uns à côté des autres ; certaines connaissances en impliquent d'autres, mais ce n'est pas toujours le cas. Il faut donc être très attentif quand on parle des différentes sortes de connaissance, car on peut facilement passer à côté d'une forme de connaissance ou la confondre avec une autre.
== La connaissance propositionnelle ==
Nous allons à présent examiner une définition de la connaissance que l'on qualifie souvent de traditionnelle et qui est un lieu commun en théorie de la connaissance<ref>{{sc|BonJour}}, p. 4.</ref>.
=== Une définition traditionnelle ===
Une personne sait que P si, et seulement si :
# elle croit que P est vrai ;
# P est vrai ;
# elle est justifiée à croire que P est vrai.
Chacun de ces points est une condition nécessaire pour qu'il y ait connaissance, c'est-à-dire que si l'une des conditions est absente, il n'y a pas de connaissance. C'est ce que nous allons montrer dans cette partie.
Ces conditions font toutes l'objet de discussions à divers degrés, mais c'est surtout la justification qui pose des problèmes particulièrement difficiles à résoudre. Malgré ces discussions, cette définition reste pour la plupart des auteurs une définition « approximativement correcte » ({{sc|BonJour}}) de la connaissance propositionnelle.
=== Croyance ===
Pour savoir que les arbres dans la cour devant chez moi sont des peupliers, je dois tout d'abord avoir la croyance que ces arbres sont des peupliers. En effet, affirmer à la fois « Je ne crois pas que ces arbres sont des peupliers » et « Je sais que ces arbres sont des peupliers » apparaît contradictoire. Ce point ne fait guère l'objet de polémique, même s'il existe des tentatives pour le mettre en défaut.
La croyance est ce que l'on appelle une ''attitude propositionnelle'', c'est-à-dire une relation entre un sujet et une proposition. Il existe toutes sortes d'attitudes propositionnelles en plus des croyances : je peux par exemple considérer une proposition (« la Terre a des ailes »), sans y croire. Le sujet pense cette proposition (P) : il pense que P, sans croire que P soit vraie ou fausse. On peut également dire que P (je dis que la Terre a des ailes) ou désirer que P.
Or, pour une croyance, on dira qu'une personne croit que P ''est vraie''. Pour distinguer la croyance des autres attitudes propositionnelles nous dirons donc que ''la croyance consiste à tenir quelque chose pour vrai.'' Ainsi, savoir quelque chose, c'est le tenir pour vrai.
Mais nous pouvons tenir quelque chose pour plus ou moins vrai. Le degré d'une croyance est donc un problème à considérer, en distinguant par exemple opinion, avis, sentiment que, etc. Pour {{sc|BonJour}}, il s'agit ici de tenir pour vraie une proposition avec une certaine assurance, c'est-à-dire qu'il faut que cette croyance soit plus qu'une vague opinion, même si une certitude absolue n'est sans doute pas requise.
Mais nous ne proposerons pas ici de discussion détaillée de ces points : il nous suffit pour le moment de voir que l'on ne peut connaître sans croire.
=== Vérité ===
{{Loupe|Vérité}}
Comme pour la notion de croyance, nous n'allons pas nous engager dans une discussion détaillée des théories sur la nature de la vérité : elles sont nombreuses et souvent difficiles. Mais dans le cadre d'une introduction, nous allons le voir, ce ne sera pas vraiment un problème pour expliquer la deuxième condition de notre définition.
Reprenons notre exemple : je crois que les arbres dans ma cour sont des peupliers ; or, il se trouve que ces arbres ne sont pas des peupliers. Nous voyons bien, dans ce cas, que je ne sais pas que ces arbres sont des peupliers : ma croyance est fausse car elle ne correspond pas à la réalité, et une croyance fausse n'est pas une connaissance.
* Je crois que P est vrai ;
* P est faux ;
* « P est vrai » n'est pas une connaissance.
* Ma croyance que P est vrai n'est pas une connaissance.
Cet exemple anodin suppose que ma croyance est vraie quand elle ''correspond'' à un fait ou quand elle décrit une certaine réalité telle qu'elle est, et qu'elle est fausse dans le cas contraire. L'exemple suppose donc une certaine idée de la nature de la vérité(la ''correspondance''). Bien que cette idée soit problématique, notre exemple est suffisant pour montrer que je sais quelque chose si, et seulement si, ma croyance est vraie, quelle que soit l'idée que l'on se fait de la vérité ; en effet, une croyance fausse n'est pas une connaissance.
=== Justification===
{{Loupe|Le Problème de Gettier}}
Croyance et vérité, nos deux premières conditions, ne suffisent pas à produire la connaissance. Nous emprunterons à Bertrand Russell quelques exemples pour le montrer.
'''Premier exemple :'''
: « Si un journal, par une anticipation intelligente, annonce le résultat dune bataille avant qu'ait été reçu aucun télégramme donnant le résultat, il peut par chance annoncer ce qui se trouve ensuite être le résultat juste, et produire une croyance chez quelques uns de ses lecteurs les moins expérimentés. Mais bien que leur croyance soit vraie, on ne peut pas dire qu'ils aient une connaissance. »
'''Deuxième exemple :'''
:« Si je sais que tous les Grecs sont des hommes et que Socrate était un homme, et que j'en infère que Socrate était un Grec, on ne peut pas dire que je sache que Socrate était un Grec, parce que, bien que mes prémisses et ma conclusion soient vraies, la conclusion ne suit pas des prémisses. »
On le voit, la manière dont sont formées les croyances vraies, dans ces deux exemples, est inappropriée. Toutes les croyances vraies ne sont donc pas des connaissances, et s'il en est ainsi c'est parce que la ''justification'' de certaines croyances vraies n'est pas appropriée. De ce fait, toutes les connaissances seront des croyances vraies ''justifiées'' d'une certaine façon. C'est notre troisième et dernière condition : je dois avoir une croyance justifiée de manière appropriée pour que cette croyance soit une connaissance.
Si j'ai une croyance et que cette croyance est vraie par ''chance'' ou ''hasard'', comme dans nos deux exemples, ce n'est pas une connaissance : ainsi, un raisonnement faux qui conduit à une conclusion vraie, un concours de circonstance, mais aussi une conviction arbitraire, une supposition faite au hasard, un pressentiment, etc. ne sont pas des justifications appropriées. La question est de savoir ce qu'est une justification appropriée, et plusieurs réponses très discutées ont été apportées à cette question. Nous aurons l'occasion d'y revenir dans le prochain chapitre, mais nous pouvons dès à présent tenter d'éclairer un peu cette notion.
Selon {{sc|BonJour}}, la justification dont nous avons besoin est d'ordre épistémique, c'est-à-dire relative à la connaissance. Ce que nous proposons d'examiner ici, c'est comment une justification épistémique se distingue d'autres genres de justifications. Nous pouvons justifier une croyance par des valeurs morales, par des raisons théologiques, mais ce ne sont apparemment pas là des justifications épistémiques, c'est-à-dire que ce ne sont pas des justifications appropriées pour connaître.
{{sc|BonJour}} propose l'exemple suivant pour bien saisir la différence qu'il peut y avoir entre ces formes de justifications : un ami qui m'a aidé par le passé lorsque j'étais dans une situation difficile est accusé d'un crime horrible. Tout le monde le pense coupable. Supposons que je ne dispose personnellement d'aucun indice et que mon ami me connaisse assez pour savoir qu'un mensonge de sa part ne passerait pas inaperçu. Je suis justifié dans ce cas à le croire innocent, et c'est même pour moi une obligation ''morale''. Pourtant, je ne sais pas s'il est ou non innocent, je suis seulement justifié ''moralement'' à le croire : mes raisons peuvent être très bonnes, elles ne sont pas épistémiques.
Ce qui distingue dès lors une justification épistémique d'une justification morale, c'est le ''souci de la vérité''. Les justifications de croire mon ami innocent ne sont pas une bonne manière de parvenir à la vérité : si je suis dans le vrai à son sujet, ce n'est pas pour de bonnes raisons, mais par hasard. La justification épistémique est donc une attitude particulière à l'égard de certaines de nos croyances : nous voulons qu'elles décrivent correctement la réalité. Dès lors, la fonction de cette sorte de justification est d'être un instrument pour attendre notre but, qui est la vérité.
Pour terminer sur ces distinctions, on peut tenir le même raisonnement avec des croyances religieuses : une croyance religieuse fondée sur des textes et des traditions, qui se trouverait vraie, n'est pas une connaissance, parce qu'elle n'est pas épistémologiquement justifiée.
== Pour finir ==
Il est important de rappeler qu'il ne s'agit ici que d'une introduction : chaque point a été formulé de manière aussi simple et courte que possible, et nous n'avons fait dans ce but que reprendre les exposés qui se trouvent dans les livres donnés en bibliographie. Si cette introduction se veut simple, il ne s'agit pas pour autant d'une simplification : les termes et arguments employés sont aussi ''précis'' que possible pour une introduction, mais ils sont ''insuffisants'' pour en discuter dans le détail.
== Bibliographie ==
Tous les livres de cette section ont été utilisés pour la rédaction de ce chapitre. Ce sont majoritairement des ouvrages anglophones, mais il n'est pas nécessaire d'avoir une parfaite connaissance de l'anglais pour les lire et les bien comprendre : il n'y a pas de jargon, le vocabulaire est assez restreint et le style est avant tout argumentatif.
* {{sc|BonJour}}, Laurence, ''The Structure of Empirical Knowledge'', 1983
* {{Sc|Chisholm}}, Roderick, ''Theory of Knowledge'', 3rd edition, 1989
* {{Sc|Lehrer}}, Keith, ''Theory of Knowledge'', 2nd ed., 2000
* {{Sc|Lemos}}, Noah, ''An Introduction to the Theory of Knowledge'', 2007
* {{Sc|Steup}}, Matthias, ''An Introduction to Contemporary Epistemology'', 1996
* {{Sc|Russell}}, Bertrand, ''Les Problèmes de la philosophie'', 1912
==Références==
<references/>
[[Catégorie:Théorie de la connaissance (livre)]]
qbjtamk7skc7dz9890kt444v4nqxz48
Catégorie:Commentaire philosophique (livre)
14
66628
769252
765037
2026-07-01T03:38:11Z
PandaMystique
119061
769252
wikitext
text/x-wiki
Analyses de textes philosophiques avec des exercices.
[[Catégorie:Livres par titre]]
[[Catégorie:Histoire de la philosophie]]
[[Catégorie:Commentaire philosophique|*]]
kmbvgq6bdbf2t6fa8a5qf2sqd2wcuxd
Catégorie:Précis d'épistémologie (livre)
14
68948
769266
765027
2026-07-01T04:02:31Z
PandaMystique
119061
769266
wikitext
text/x-wiki
[[Catégorie:Livres par titre]]
[[Catégorie:épistémologie ]]
[[Catégorie:Classe 1 - Philosophie et psychologie]]
cljzsezp59vrrv86p4r8ar81sc6uuig
Python pour le calcul scientifique/Découverte de Python et de Jupyter
0
72864
769272
768629
2026-07-01T06:58:08Z
Cdang
1202
/* Vocabulaire */ exemple
769272
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Ci-dessous, nous verrons la méthode <code>.append()</code> attachée aux objets de type « liste » (voir la section ''[[##Listes_et_n-uplets|#Listes_et_n-uplets]]'' ci-dessous).
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>[…]</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
aifdh388aiu9wzcbxtedptoq848z0sx
769273
769272
2026-07-01T06:58:26Z
Cdang
1202
/* Vocabulaire */ typo
769273
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Ci-dessous, nous verrons la méthode <code>.append()</code> attachée aux objets de type « liste » (voir la section ''[[#Listes_et_n-uplets|Listes_et_n-uplets]]'' ci-dessous).
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>[…]</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
4k4405zxn2v5dlut0ovwx92bsbb3ovt
769274
769273
2026-07-01T06:58:55Z
Cdang
1202
/* Vocabulaire */
769274
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons la méthode <code>.append()</code> attachée aux objets de type « liste » (voir la section ''[[#Listes_et_n-uplets|Listes_et_n-uplets]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>[…]</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
s842l43848f8m9hrrrdzh5sqdi3tmka
769275
769274
2026-07-01T07:00:13Z
Cdang
1202
/* Vocabulaire */ + d'exemples
769275
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes_et_n-uplets|Listes_et_n-uplets]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>[…]</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
alsutj79jb65gvxtkz1wbb8pzp15jrc
769277
769275
2026-07-01T07:05:39Z
Cdang
1202
/* Listes et n-uplets */ sectionnage
769277
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes_et_n-uplets|Listes_et_n-uplets]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>[…]</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
nwv2gj70ajobmpctkqrg0wa8ylav063
769278
769277
2026-07-01T07:06:16Z
Cdang
1202
/* Vocabulaire */ lien plus précis
769278
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>[…]</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
8i3845k6bz9gf7pdq39h16wt7hafgn8
769281
769278
2026-07-01T07:15:58Z
Cdang
1202
/* Listes */ .sort
769281
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
La méthode <code>.sort()</code> permet de classer les éléments par ordre croissant, mais uniquement s'ils sont comparable. Typiquement, les éléments doivent être soit tous des nombres, soit tous des chaînes de caractères, mais on ne peut pas mélanger ces deux types ; mais on peut mélanger les entiers et les réels. Pour trier la liste <code>a</code> par ordre décroissant, on utilise <code>a.sort(reverse=True)</code>.
Par exemple :
<syntaxhighlight lang="python">
a = [1, 3, 2, 4]
print(a)
# [1, 3, 2, 4]
a.sort()
print(a)
# [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]
</syntaxhighlight>
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>[…]</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
exj8y2ie3ds0zsktva0r0j6ztcwq0wm
769283
769281
2026-07-01T07:17:42Z
Cdang
1202
/* Itérable */ corr.
769283
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
La méthode <code>.sort()</code> permet de classer les éléments par ordre croissant, mais uniquement s'ils sont comparable. Typiquement, les éléments doivent être soit tous des nombres, soit tous des chaînes de caractères, mais on ne peut pas mélanger ces deux types ; mais on peut mélanger les entiers et les réels. Pour trier la liste <code>a</code> par ordre décroissant, on utilise <code>a.sort(reverse=True)</code>.
Par exemple :
<syntaxhighlight lang="python">
a = [1, 3, 2, 4]
print(a)
# [1, 3, 2, 4]
a.sort()
print(a)
# [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]
</syntaxhighlight>
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>(…)</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
r0raoj8ze4cth2rzp2pjwt12c0gpjkz
769284
769283
2026-07-01T07:19:12Z
Cdang
1202
/* Listes */ list()
769284
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
La méthode <code>.sort()</code> permet de classer les éléments par ordre croissant, mais uniquement s'ils sont comparable. Typiquement, les éléments doivent être soit tous des nombres, soit tous des chaînes de caractères, mais on ne peut pas mélanger ces deux types ; mais on peut mélanger les entiers et les réels. Pour trier la liste <code>a</code> par ordre décroissant, on utilise <code>a.sort(reverse=True)</code>.
Par exemple :
<syntaxhighlight lang="python">
a = [1, 3, 2, 4]
print(a)
# [1, 3, 2, 4]
a.sort()
print(a)
# [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]
</syntaxhighlight>
On peut construire une liste à partir de n'importe quel objet itérable avec la commande <code>list(''itérable'')</code> (voir la section ''[[#Itérable|Itérable]]'' ci-dessous).
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>(…)</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=" ")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
C = "123"
for i in C:
print(i, end=" ")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# 1 2 3 A B C a b c
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
7i20xov8wiy9vkgektffjtj4b2pl861
769286
769284
2026-07-01T07:26:12Z
Cdang
1202
/* Itérable */ exemple restructuré
769286
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
La méthode <code>.sort()</code> permet de classer les éléments par ordre croissant, mais uniquement s'ils sont comparable. Typiquement, les éléments doivent être soit tous des nombres, soit tous des chaînes de caractères, mais on ne peut pas mélanger ces deux types ; mais on peut mélanger les entiers et les réels. Pour trier la liste <code>a</code> par ordre décroissant, on utilise <code>a.sort(reverse=True)</code>.
Par exemple :
<syntaxhighlight lang="python">
a = [1, 3, 2, 4]
print(a)
# [1, 3, 2, 4]
a.sort()
print(a)
# [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]
</syntaxhighlight>
On peut construire une liste à partir de n'importe quel objet itérable avec la commande <code>list(''itérable'')</code> (voir la section ''[[#Itérable|Itérable]]'' ci-dessous).
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>(…)</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=", ")
# 1, 2, 3,
print("")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
# A, B, C,
print("")
C = "123"
for i in C:
print(i, end=" ")
# 1, 2, 3,
print("")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# a, b, c,
print("")
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
pvp6fesaaxc1oxoxpq2ylain3njocjn
769287
769286
2026-07-01T07:32:33Z
Cdang
1202
/* Itérable */ sorted
769287
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
La méthode <code>.sort()</code> permet de classer les éléments par ordre croissant, mais uniquement s'ils sont comparable. Typiquement, les éléments doivent être soit tous des nombres, soit tous des chaînes de caractères, mais on ne peut pas mélanger ces deux types ; mais on peut mélanger les entiers et les réels. Pour trier la liste <code>a</code> par ordre décroissant, on utilise <code>a.sort(reverse=True)</code>.
Par exemple :
<syntaxhighlight lang="python">
a = [1, 3, 2, 4]
print(a)
# [1, 3, 2, 4]
a.sort()
print(a)
# [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]
</syntaxhighlight>
On peut construire une liste à partir de n'importe quel objet itérable avec la commande <code>list(''itérable'')</code> (voir la section ''[[#Itérable|Itérable]]'' ci-dessous).
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>(…)</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=", ")
# 1, 2, 3,
print("")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
# A, B, C,
print("")
C = "123"
for i in C:
print(i, end=" ")
# 1, 2, 3,
print("")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# a, b, c,
print("")
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>sorted()</code> trie les itérables par ordre croissant, à condition que les éléments soient comparables (typiquement tous des nombres ou bien tous des chaînes de caractères). Le paramètre <code>reverse=True</code> permet de trier par ordre décroissant. Notez que le résultat est forcément une liste.
<syntaxhighlight lang="Python">
A = [1, 2, 3]
A = sorted(A, reverse = True)
print(type(A), A)
# <class 'list'> [3, 2, 1]
B = ("A", "B", "C")
B = sorted(B, reverse = True)
print(type(B), B)
# <class 'list'> ['C', 'B', 'A']
C = "123"
C = sorted(C, reverse = True)
print(type(C), C)
# <class 'list'> ['3', '2', '1']
D = dict(a = 1, b = 2, c = 3)
D = sorted(D, reverse = True)
print(type(D), D)
# <class 'list'> ['c', 'b', 'a']
</syntaxhighlight>
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
g2le08lvt3l9srygzc59t1265jsotg9
769289
769287
2026-07-01T07:56:22Z
Cdang
1202
/* Itérable */ notion d'itérateur
769289
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
La méthode <code>.sort()</code> permet de classer les éléments par ordre croissant, mais uniquement s'ils sont comparable. Typiquement, les éléments doivent être soit tous des nombres, soit tous des chaînes de caractères, mais on ne peut pas mélanger ces deux types ; mais on peut mélanger les entiers et les réels. Pour trier la liste <code>a</code> par ordre décroissant, on utilise <code>a.sort(reverse=True)</code>.
Par exemple :
<syntaxhighlight lang="python">
a = [1, 3, 2, 4]
print(a)
# [1, 3, 2, 4]
a.sort()
print(a)
# [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]
</syntaxhighlight>
On peut construire une liste à partir de n'importe quel objet itérable avec la commande <code>list(''itérable'')</code> (voir la section ''[[#Itérable|Itérable]]'' ci-dessous).
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__cal__</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>(…)</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=", ")
# 1, 2, 3,
print("")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
# A, B, C,
print("")
C = "123"
for i in C:
print(i, end=" ")
# 1, 2, 3,
print("")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# a, b, c,
print("")
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>sorted()</code> trie les itérables par ordre croissant, à condition que les éléments soient comparables (typiquement tous des nombres ou bien tous des chaînes de caractères). Le paramètre <code>reverse=True</code> permet de trier par ordre décroissant. Notez que le résultat est forcément une liste.
<syntaxhighlight lang="Python">
A = [1, 2, 3]
A = sorted(A, reverse = True)
print(type(A), A)
# <class 'list'> [3, 2, 1]
B = ("A", "B", "C")
B = sorted(B, reverse = True)
print(type(B), B)
# <class 'list'> ['C', 'B', 'A']
C = "123"
C = sorted(C, reverse = True)
print(type(C), C)
# <class 'list'> ['3', '2', '1']
D = dict(a = 1, b = 2, c = 3)
D = sorted(D, reverse = True)
print(type(D), D)
# <class 'list'> ['c', 'b', 'a']
</syntaxhighlight>
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
{{note |Il ne faut pas confondre itérable et itérateur ''({{lang|en|iterator}})''. Un itérateur représente un flux de données, et est typiquement construit lors de l'utilisation d'une structure <code>for</code>. On peut construire directement un itérateur avec la fonction <code>iter()</code>, ou bien avec la fonction <code>reversed()</code> auquel cas le flux de données est inversé. Les itérateurs possèdent la méthode <code>__next__()</code> qui renvoie l'élément suivant (et le premier élément au premier appel).
On peut transformer un itérateur en liste ou en n-uplet, mais cela interrompt alors le flux de données (on ne peut plus utiliser <code>.__next__()</code>).
La manipulation directe d'itérateurs n'est pas très utile, mais connaître cette notion permet de mieux comprendre le fonctionnement de Python.}}
<syntaxhighlight lang="Python">
A = [1, 2, 3, 4, 5]
A = iter(A)
print(A)
# <list_iterator object at 0x00000204181AB3A0>
print(A.__next__())
# 1
print(A.__next__())
# 2
print(list(A))
# [3, 4, 5]
B = ("A", "B", "C", "D", "E")
B = reversed(B)
print(B)
# <reversed object at 0x0000020417A7E9B0>
print(B.__next__())
# E
print(B.__next__())
# D
print(tuple(B))
# ('C', 'B', 'A')
</syntaxhighlight>
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
k6vogrxr2ocfhfksvg23hfgzpfoek3a
769293
769289
2026-07-01T07:58:59Z
Cdang
1202
/* Appelable ({{lang|en|callable}}) */ typo
769293
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
La méthode <code>.sort()</code> permet de classer les éléments par ordre croissant, mais uniquement s'ils sont comparable. Typiquement, les éléments doivent être soit tous des nombres, soit tous des chaînes de caractères, mais on ne peut pas mélanger ces deux types ; mais on peut mélanger les entiers et les réels. Pour trier la liste <code>a</code> par ordre décroissant, on utilise <code>a.sort(reverse=True)</code>.
Par exemple :
<syntaxhighlight lang="python">
a = [1, 3, 2, 4]
print(a)
# [1, 3, 2, 4]
a.sort()
print(a)
# [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]
</syntaxhighlight>
On peut construire une liste à partir de n'importe quel objet itérable avec la commande <code>list(''itérable'')</code> (voir la section ''[[#Itérable|Itérable]]'' ci-dessous).
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__call__()</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>(…)</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=", ")
# 1, 2, 3,
print("")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
# A, B, C,
print("")
C = "123"
for i in C:
print(i, end=" ")
# 1, 2, 3,
print("")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# a, b, c,
print("")
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>sorted()</code> trie les itérables par ordre croissant, à condition que les éléments soient comparables (typiquement tous des nombres ou bien tous des chaînes de caractères). Le paramètre <code>reverse=True</code> permet de trier par ordre décroissant. Notez que le résultat est forcément une liste.
<syntaxhighlight lang="Python">
A = [1, 2, 3]
A = sorted(A, reverse = True)
print(type(A), A)
# <class 'list'> [3, 2, 1]
B = ("A", "B", "C")
B = sorted(B, reverse = True)
print(type(B), B)
# <class 'list'> ['C', 'B', 'A']
C = "123"
C = sorted(C, reverse = True)
print(type(C), C)
# <class 'list'> ['3', '2', '1']
D = dict(a = 1, b = 2, c = 3)
D = sorted(D, reverse = True)
print(type(D), D)
# <class 'list'> ['c', 'b', 'a']
</syntaxhighlight>
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
{{note |Il ne faut pas confondre itérable et itérateur ''({{lang|en|iterator}})''. Un itérateur représente un flux de données, et est typiquement construit lors de l'utilisation d'une structure <code>for</code>. On peut construire directement un itérateur avec la fonction <code>iter()</code>, ou bien avec la fonction <code>reversed()</code> auquel cas le flux de données est inversé. Les itérateurs possèdent la méthode <code>__next__()</code> qui renvoie l'élément suivant (et le premier élément au premier appel).
On peut transformer un itérateur en liste ou en n-uplet, mais cela interrompt alors le flux de données (on ne peut plus utiliser <code>.__next__()</code>).
La manipulation directe d'itérateurs n'est pas très utile, mais connaître cette notion permet de mieux comprendre le fonctionnement de Python.}}
<syntaxhighlight lang="Python">
A = [1, 2, 3, 4, 5]
A = iter(A)
print(A)
# <list_iterator object at 0x00000204181AB3A0>
print(A.__next__())
# 1
print(A.__next__())
# 2
print(list(A))
# [3, 4, 5]
B = ("A", "B", "C", "D", "E")
B = reversed(B)
print(B)
# <reversed object at 0x0000020417A7E9B0>
print(B.__next__())
# E
print(B.__next__())
# D
print(tuple(B))
# ('C', 'B', 'A')
</syntaxhighlight>
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
flpqimajz8k11huga1ox17rpi01mmm2
769295
769293
2026-07-01T08:10:25Z
Cdang
1202
/* Appelable ({{lang|en|callable}}) */ utilisation de l'underscore
769295
wikitext
text/x-wiki
Python est un langage interprété. Il peut s'utiliser en ligne de commande, l'invite étant représentée par trois chevrons
<syntaxhighlight lang="python">
>>> 3+2
5
</syntaxhighlight>
Le code source peut être mis dans un fichier texte portant l'extension de nom de fichier <code>.py</code>. Cela requiert donc un éditeur de texte.
Les fichiers que nous allons créer commenceront tous de la manière suivante :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
La première ligne, appelée ''[[wiktionary:fr:shebang|shebang]]'', n'est pas utile avec l'environnement que nous allons utiliser mais il est intéressant de la mettre pour assurer une compatibilité du code avec d'autres environnements. Les lignes commençant par <code lang="python">import</code> permettent d'importer des bibliothèques de fonctions ; nous en ajouterons au gré des besoins.
Nous allons utiliser l'environnement de programmation Jupyter, un environnement libre, gratuit et multiplateforme. Jupyter utilise un navigateur Internet comme éditeur de texte et pour l'affichage des résultats.
== Installer Jupyter ==
[[Fichier:Jupyter logo.svg|vignette|upright=0.5|Jupyter.]]
Nous utilisons la distribution Anaconda : https://www.anaconda.com/
Suivez les instructions d'installation selon votre système. Choisissez « Python 3 ».
{{note|Sous MacOS X, il peut être nécessaire de créer un alias vers le programme Jupyter-lab ; ce programme se trouve habituellement au chemin <code>/anaconda3/bin/jupyter-lab</code>.}}
Bien entendu, vous pouvez aussi utiliser un éditeur de texte classique. Vous pouvez par exemple vous intéresser à l'éditeur Pulsar<ref>{{lien web |url=https://pulsar-edit.dev/ |titre=Pulsar Edit |site=Pulsar |consulté le=2025-09-02}}.</ref>, libre et multiplateforme.
== Premiers pas ==
[[Fichier:Jupyter Python Save As Firefox.png|vignette|Fenêtre Python/Jupyter Lab dans Firefox : fonction <code>Save Notebook As…</code>]]
Lancez le programme <code>Jupyter Lab</code>. Cela vous ouvre une fenêtre dans votre navigateur Internet. Dans cette fenêtre, choisissez <code>Notebook Python 3</code> : la page devient un éditeur de texte.
Cette page est organisée en cellules ; une cellule est une zone de texte. Vous pouvez donc avoir plusieurs zones de texte, chacune contenant un élément du programme que vous développez. Dans un premier temps, nous allons travailler avec une seule cellule et l'utiliser comme une ligne de commande.
Dans cette cellule, tapez <code>3 + 2</code> puis cliquez que le bouton d'évaluation <code>[▶]</code> : cela affiche logiquement le résultat « 5 » en dessous.
Vous pouvez sauvegarder cet embryon de programme avec le menu <code>File > Save Notebook As…</code> Cela crée un fichier portant l'extension de nom de fichier <code>.ipynb</code>.
{{boîte déroulante/début|titre=Définir un répertoire de départ}}
Jupyter Notebook se présente dans le navigateur Internet ''({{lang|en|web browser}})'', mais s'utilise comme un navigateur de fichiers (Windows Explorer, Finder, GNOME Commander, Konqueror…). Si l'on veut définir le répertoire de départ, il faut ouvrir Jupyter Notebook avec une commande dans l'Anaconda Prompt :
# Ouvrir <code>Anaconda Prompt</code>.
# Entrer la commande suivante : <code>jupyter notebook --notebook-dir=''chemin''</code>.
Où <code>''chemin''</code> est le chemin d'accès au répertoire voulu. Par exemple, si l'on veut utiliser sous Microsoft Windows le répertoire <code>D:\Temp\</code>, on utilise la commande <code>jupyter notebook --notebook-dir=D:\Temp\</code>.
{{boîte déroulante/fin}}
== Vocabulaire ==
; Classe, instance
: Python est un langage orienté objet (oo). Les différents objets manipulés — fonctions, valeurs (numériques, chaînes de caractères)… — dérivent d'archétypes appelés « classe ».
: Par exemple, une matrice NumPy est une mise en application de la classe <code>numpy.array</code>, on dit que « la matrice est une instance de la classe <code>numpy.array</code> ».
; Méthode
: Une méthode est une fonction associée à une classe. Quand un objet <code>X</code> est une instance de cette classe, on peut avoir accès à la fonction par la la syntaxe <code>X.''méthode''()</code>.
: Par exemple, la classe<code>numpy.array</code> possède une méthode <code>.max()</code> qui donne la valeur maximale contenue dans la matrice. Si <code>X</code> est une instance de la classe<code>numpy.array</code>, alors <code>X.max()</code> donne le maximum de <code>X</code>.
: Ci-dessous, nous verrons les méthodes <code>.append()</code>, <code>.pop()</code> et <code>.remove()</code> attachées aux objets de type « liste » (voir la section ''[[#Listes|Listes]]'' ci-après).
; Module, espace de nom
: Un module est un ensemble de classes (fonctions, type de variables…) développées pour un sujet donné.
: Par exemple, le module NumPy est dédié au calcule numérique, le module Scipy est dédié au calcul scientifique le module Matplotlib est dédié au tracé de données.
: Un module se charge avec la commande <code>import</code> ; charger un module permet d'avoir accès à de nouveaux type de variable et à de nouvelles fonctions.
: Les modules étant développés séparément, il se peut que des objets de différents modules portent le même nom. Pour éviter les confusions, on fait précéder le nom d'un objet par le nom du module d'où il vient, ou bien de son abréviation. Ainsi, la fonction sinus est fournie par les modules <code>math</code> et <code>numpy</code>, et n'est peut-être pas programmée de la même manière dans les deux modules. Si l'on charge les deux modules, on peut appeler <code>math.sin()</code> et <code>numpy.sin()</code> (ou bien <code>np.sin()</code>).
== Commandes élémentaires ==
Nous avons de base les opérateurs mathématiques élémentaires :
* <code>+</code> : addition ;
* <code>-</code> : soustraction ;
* <code>*</code> : multiplication ;
* <code>/</code> : division ;
* <code>//</code> : division euclidienne (entière) ;
* <code>%</code> : reste de la division euclidienne ;
* <code>**</code> : élévation à la puissance<ref>Note : l'accent circonflexe « <code>^</code> » ''({{lang|en|caret}})'', utilisé dans de nombreux langages pour l'élévation à la puissance, effectue ici un « ou exclusif » ''(XOR)'' bit à bit.</ref>.
Exemples : cliquez dans la cellule et ajoutez à la suite
<syntaxhighlight lang="python">
print("6/4 =", 6//4, "reste", 6%4)
print(2**0.5) # racine carrée
</syntaxhighlight>
<code>[▶]</code>
6/4 = 1 reste 2
1.4142135623730951
La division euclidienne peut aussi se faire avec l'instruction <code>divmod()</code> :
<syntaxhighlight lang="python">
a = divmod(6, 4)
print("6/4 =", a[0], "reste", a[1])
</syntaxhighlight>
Nous voyons ici que la commande <code>print()</code> affiche des informations à l'écran. Les chaînes de caractères peuvent être encadrées de guillemets simple <code>'</code> ou doubles <code>"</code>. Le croisillon <code>#</code> permet de mettre des commentaires.
L'opérateur <code>+</code> permet de concaténer deux chaînes de caractères.
L'affectation d'une variable se fait avec le signe égal :
<syntaxhighlight lang="python">
a = 5
print(2*a)
</syntaxhighlight>
<code>[▶]</code>
10
Trois points pour terminer avec les nombres : le type réel à virgule flottante dispose de la méthode <code>.as_integer_ratio()</code> qui transforme un nombre en fraction.
<syntaxhighlight lang="python">
a = 1.5
print(a.as_integer_ratio()) # (3, 2) : fraction 3/2
</syntaxhighlight>
Ensuite, on peut obtenir l'infini +∞ avec <code>float("inf")</code> ou <code>float("infinity")</code> :
<syntaxhighlight lang="python">
1/float("inf") # 0.0
</syntaxhighlight>
On peut également avoir le [[w:fr:NaN|''{{lang|en|not a number}}'']] avec <code>float("nan")</code>.
Enfin, l'imaginaire <math>\sqrt{-1}</math> se note <code>1j</code>. De manière générale, on peut écrire <code>2j</code>, <code>3.5j</code>… Le type complexe dispose de la méthode <code>conjugate()</code> qui calcule le conjugué.
<syntaxhighlight lang="python">
print(1j**2) # (-1+0j)
a = 2 + 3.5j
print(a.conjugate()) # (2-3.5j)
</syntaxhighlight>
Les commandes de type <code>''x''=</code>, où ''x'' est un opérateur (<code>+</code>, <code>-</code>, <code>*</code> ou <code>/</code>, <code>//</code>, <code>%</code>, <code>**</code>), permet de modifier une variable ''({{lang|en|in-place operator}})'' :
* <code>a += 0.5</code> est équivalent à <code>a = a + 0.5</code> ;
* <code>a -= 0.5</code> est équivalent à <code>a = a - 0.5</code> ;
* <code>a *= 0.5</code> est équivalent à <code>a = a * 0.5</code> ;
* <code>a /= 0.5</code> est équivalent à <code>a = a / 0.5</code> ;
* …
== Premier tracé graphique ==
[[Fichier:Graphe fct carre Python Matplotlib Jupyter.png|vignette|Graphe de la fonction carré avec Python/Matplotlib.]]
Pour effectuer des tracés graphiques, il faut charger la bibliothèque Matplotlib ; nous choisissons l'option <code>pyplot</code> qui permet d'avoir une syntaxe similaire à Matlab. Pour utiliser cette bibliothèque, il faut écrire <code>import matplotlib.pyplot</code> ; cela donne l'accès à de nouvelles fonctions telles que <code>matplotlib.pyplot.plot()</code>.
Comme il est fastidieux d'écrire <code>matplotlib.pyplot</code> avant chaque commande de cette bibliothèque, nous pouvons utiliser une abréviation, par exemple <code>plt</code>, introduite par <code>as</code> lors de l'importation.
Il nous faut aussi pouvoir travailler facilement avec une liste de nombre. Nous chargeons pour cela la bibliothèque NumPy et nous décidons de l'abréger <code>np</code>.
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2, 0.1)
y = x**2
plt.plot(x, y, label="y = x^2")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Graphes de fonctions")
plt.legend()
</syntaxhighlight>
La fonction <code>np.arange()</code> permet de créer un vecteur (liste de valeurs) allant de 0 à 2 avec un pas de 0,1. La fonction <code>plt.plot()</code> trace la courbe. Les fonctions <code>plt.xlabel()</code>, <code>plt.ylabel()</code> et <code>plt.title()</code> permettent de mettre des titres aux axes et au graphique. La commande <code>plt.legend()</code> affiche la légende définie dans la commande <code>plt.plot()</code>.
Concernant la légende : vous pouvez avoir un rendu de type LaTeX en utilisant les balises <code>$…$</code> dans le paramètre <code>label</code> de <code>plt.plot()</code> :
<syntaxhighlight lang="python">
plt.plot(x, y, label="$y = x^2$")
</syntaxhighlight>
Vous remarquerez que la valeur « 2 » n'est pas sur la figure : en effet, selon la logique du « tranchage » ''({{lang|en|slicing}})'', dans l'expression <code>np.arange(0, 2, 0.1)</code>, le nombre 2 est une extrémité exclue du vecteur. Pour l'intégrer, on peut mettre la première valeur qui ne figure pas, ici <code>2.1</code> mais cela pourrait poser des problèmes si l'on changeait le pas. Le module NumPy propose une fonction <code>nextafter()</code> qui indique le réel à virgule flottante le plus proche, on pourrait donc écrire <code>np.arange(0, np.nextafter(2, 3), 0.1)</code> (le nombre 3 servant juste à indiquer que l'on veut un nombre supérieur à 2). Mais le plus simple consiste à utiliser la fonction <code>np.linspace()</code> :
<syntaxhighlight lang="python">
x = np.linspace(0, 2, 20) # 20 valeurs entre 0 et 2 inclus
</syntaxhighlight>
== Les chaînes de caractères ==
Une chaîne de caractères est simplement mise entre des guillemets simples <code>'…'</code> ''ou'' des guillemets doubles <code>"…"</code>. Si le texte contient une apostrophe, on utilise des guillemets doubles ; dans <code>"d'Artagnan"</code>, le « <code>'</code> » est interprété comme un caractère et non comme un délimiteur de chaîne. Et à l'inverse, si on veut utiliser des guillemets doubles dans la chaîne, on la délimite par des guillemets simples : <code>'"En garde !" dit-il'</code>. On peut aussi utiliser la barre de fraction inversée comme « caractère d'échappement » : <code>'"En garde !" s\'exclama d\'Aragnan'</code>.
Pour éviter d'utiliser les échappements <code>\'</code> ou <code>\"</code>, si l'encodage du fichier est en Unicode (typiquement utf-8), il est également possible d'utiliser les caractères typographiques : ’ – « – » – “ – ”. Mais ces caractères ne sont pas disponibles facilement à partir du clavier seul.
Dans une variable, les caractères sont numérotés de 0 à ''n'' – 1 (si ''n'' est le nombre de caractères de la chaîne) :
<syntaxhighlight lang="python">
a = "Python"
a[2] # t
</syntaxhighlight>
Si l'on veut extraire plusieurs caractères, on utilise deux-points, sous la forme <code>début:fin</code> mais il faut bien comprendre que les numéros correspondent en fait aux interstices entre les caractères. Ainsi, <code>0:1</code> va extraire uniquement le premier caractère (celui compris entre les interstices 0 et 1), <code>0:2</code> va extraire les deux premiers caractères…
L'indice <code>-1</code> correspond à l'interstice entre le dernier et l'avant-dernier caractère. Pour résumer :
<syntaxhighlight lang="text">
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
</syntaxhighlight>
Par exemple
<syntaxhighlight lang="python">
a = "Python"
print(a[0:3]) # Pyt
print(a[3:-1]) # ho
</syntaxhighlight>
La chaîne intégrale s'obtient avec <code>a[0:]</code> ou <code>a[:]</code>. La chaîne sauf le dernier caractère s'obtient avec <code>a[:-1]</code> ; la chaîne du troisième au dernier caractère s'obtient avec <code>a[2:]</code>. Le dernier caractère s'obtient avec <code>a[-1:]</code> ou bien <code>a[len(a)]</code>.
Cette méthode qui consiste à définir des interstices est appelée « découpage en tranches, tranchage », en anglais ''{{lang|en|slicing}}''.
Concernant les caractères non-alphanumériques, on peut utiliser les codes hexadécimaux des caractères Unicode avec l'échappement <code>\u</code> : le caractère U+''xxxx'' s'obtient avec <code>"\u''xxxx''</code>". Par exemple
<syntaxhighlight lang="python">
print("Bonjour \u263A")
# Bonjour ☺
</syntaxhighlight>
On peut aussi utiliser les entités HTML :
<syntaxhighlight lang="python">
import html
…
print(html.entities.html5["alpha;"])
# α
</syntaxhighlight>
L'entité HTML <code>&''xxx'';</code> s'obtient par <code>html.entities.html5["''xxx'';"]</code>, donc en enlevant la perluète.
== Listes et n-uplets ==
[[Fichier:Slicing index Python.svg|thumb|Découpage en tranche ''(slicing)'' : indexation des éléments à extraire d'une chaîne, d'une liste ou d'un n-uplet en Python.]]
=== Listes ===
Une liste est une suite d'éléments numérotés. On peut mélanger des nombres et des chaînes de caractère. Pour déclarer une liste, il suffit d'écrire les éléments entre crochets et séparés des virgules. Pour extraire un élément ou un groupe d'éléments, on utilise également le tranchage.
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
print(a[2:4]) # ['c', 1]
</syntaxhighlight>
On peut aussi remplacer une partie de la liste, par exemple :
<syntaxhighlight lang="python">
a = ["a", "b", "c", 1, 2, 3]
a[3] = "foo"
print(a) # ['a', 'b', 'c', 'foo', 2, 3]
</syntaxhighlight>
Pour ajouter un élément, on peut utiliser la concaténation
<syntaxhighlight lang="python">
a = a + 4
print(a) # ['a', 'b', 'c', 'foo', 2, 3, 4]
</syntaxhighlight>
ou bien la « méthode » <code>append()</code> :
<syntaxhighlight lang="python">
a.append(4)
</syntaxhighlight>
Une méthode est une fonction attachée à un type d'objet ; ici, la fonction <code>append()</code> est attachée aux listes.
Pour effacer l'élément ''i'', on utilise
<syntaxhighlight lang="python">
del a[i-1]
</syntaxhighlight>
Si on veut obtenir la valeur de l'élément avant de le supprimer :
<syntaxhighlight lang="python">
valeur = a.pop([i-1])
</syntaxhighlight>
Et pour effacer le premier élément dont la valeur est ''x'' :
<syntaxhighlight lang="python">
a.remove(x)
</syntaxhighlight>
La méthode <code>.sort()</code> permet de classer les éléments par ordre croissant, mais uniquement s'ils sont comparable. Typiquement, les éléments doivent être soit tous des nombres, soit tous des chaînes de caractères, mais on ne peut pas mélanger ces deux types ; mais on peut mélanger les entiers et les réels. Pour trier la liste <code>a</code> par ordre décroissant, on utilise <code>a.sort(reverse=True)</code>.
Par exemple :
<syntaxhighlight lang="python">
a = [1, 3, 2, 4]
print(a)
# [1, 3, 2, 4]
a.sort()
print(a)
# [1, 2, 3, 4]
a.remove(2)
print(a)
# [1, 3, 4]
</syntaxhighlight>
On peut construire une liste à partir de n'importe quel objet itérable avec la commande <code>list(''itérable'')</code> (voir la section ''[[#Itérable|Itérable]]'' ci-dessous).
=== N-uplets ''({{lang|en|tuples}})'' ===
Un n-uplet, en anglais ''{{lang|en|tuple}}'', est similaire à une liste mais on ne peut pas la modifier (ajouter ou changer un élément). L'avantage est qu'elle prend moins de place en mémoire. Elle est définie simplement en séparant les éléments par des virgules. Pour plus de clarté, on peut la mettre entre parenthèses.
<syntaxhighlight lang="python">
b = "a", "b", "c", 1, 2, 3
# ou bien
b = ("a", "b", "c", 1, 2, 3)
</syntaxhighlight>
Pour faire un n-uplet d'un seul élément, il faut mettre une virgule après l'élément. Pour des raisons de lisibilité, il est conseillé d'utiliser alors des parenthèses.
<syntaxhighlight lang="python">
c = ("un seul élément",)
</syntaxhighlight>
Notez que la commande <code>print</code> s'applique à un n-uplet, la présence de parenthèses est donc optionnelle.
<syntaxhighlight lang="python">
print "a =", 4
print("a =", 4)
</syntaxhighlight>
== Les booléens ==
Les deux valeurs booléennes sont <code>True</code> et <code>False</code>. Ce sont notamment les résultats des comparaisons avec <code>==</code> (égalité), <code>!=</code> (différence), <code><</code>, <code>></code>, <code><=</code> et <code>>=</code>. On peut leur appliquer les opérateurs logiques <code>not</code>, <code>and</code> et <code>or</code>.
<syntaxhighlight lang="python">
a = False
b = 4 <= 5
print(a and b) # False
</syntaxhighlight>
L'opérateur <code>&</code> est équivalent à <code>and</code> ; le tube <code>|</code> est équivalent à <code>or</code>. Comme pour les opérations arithmétiques, on peut modifier une variable avec <code>&=</code> et <code>|=</code>. Par exemple :
<syntaxhighlight lang="python">
print(True & False) # False
print(True - False) # True
a = True
a &= False # équivalent à a = a & False
print(a) # False
</syntaxhighlight>
On a normalement pas besoin de tester un booleen : il est son propre test. Par exemple :
<syntaxhighlight lang="python">
a = True
if a:
print("vrai")
</syntaxhighlight>
Va afficher « vrai ». Si l'on veut toutefois tester la valeur, on utilise alors <code>is</code> (et non pas <code>==</code> comme pour les autres types, même si cela marche aussi avec lees booléens) :
<syntaxhighlight lang="python">
a = True
if a is True:
print("vrai")
</syntaxhighlight>
{{voir|[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle]]}}
== Les ensembles et les dictionnaires ==
Un ensemble est une liste mais dont l'ordre n'a pas d'importance. Pour cela, il suffit de mettre les éléments entre accolades <code>{…}</code>. On peut aussi utiliser l'instruction <code>set()</code>.
<syntaxhighlight lang="python">
set([1, 2, 3]) # {1, 2, 3}
</syntaxhighlight>
Les opérations possibles sont :
* <code>a in E</code> : teste si un élément ''a'' fait partie de l'ensemble E (booléen) ;
* <code>E|F</code> : union des ensembles E et F ;
* <code>E&F</code> : intersection des ensembles E et F ;
* <code>E-F</code> : éléments de E qui ne sont pas dans F ;
* <code>E^F</code> : éléments qui sont dans E ou dans F mais ''pas'' dans les deux.
Un dictionnaire est un ensemble de paires « (mot-clef ; valeur) ». Il s'obtient aussi avec des accolades : <code>{ "mot-clefs1" : valeur1, "mot-clefs2" : valeurs2, …}</code>. On peut aussi utiliser la commande <code>dict()</code>.
<syntaxhighlight lang="python">
dico = dict(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
print(dico["b"]) # 2
</syntaxhighlight>
Notez que des accolades vides <code>{}</code> créent le dictionnaire vide.
== Les espaces de noms ==
De nombreux modules additionnels sont développés pour le langage Python. Lorsque l'on charge un module, pour appeler les fonctions ou classe qu'il apporte, il faut rajouter le nom du module devant le nom de la fonction. Ainsi, si plusieurs modules définissent des fonctions de même nom, il n'y a pas d'ambiguïté. Par exemple, si l'on veut utiliser la fonction <code>mean()</code> apporté par le module <code>numpy</code>, il faut taper <code>numpy.mean()</code>.
Le préfixe du nom de fonction ou de classe est appelé l'espace de nom.
Il est possible d'abréger l'espace de nom. Ainsi, ci-dessus, nous avons abrégé <code>numpy</code> en <code>np</code> et ainsi, pour appeler la fonction, il suffit d'écrire <code>np.mean()</code>
== Installation et mise à jour de modules ==
Il est possible que certains modules soient absents de votre installation. Pour les installer, on utilise la commande <code lang="python">pip</code> ''({{lang|en|Python installer program}})'', avec la syntaxe suivante :
<syntaxhighlight lang="python">
pip install nomDuModule
</syntaxhighlight>
Si l'on veut mettre à jour un module avec un version plus récente, on utilise :
<syntaxhighlight lang="python">
pip install --upgrade nomDuModule
</syntaxhighlight>
== Appelable ''({{lang|en|callable}})'' ==
Dans Python, un « appelable » ''({{lang|en|callable}})'' est un objet qui dispose d'une méthode <code>__call__()</code>. De manière moins jargonnante, c'est une fonction, un objet que l'on peut appeler avec une paire de parenthèses. Par exemple, l'instruction <code>divmod()</code> est un appelable.
Certaines fonctions renvoient un n-uplet. Par exemple, lorsque 'on fait une régression linéaire avec la commande <code>np.linalg.lstsq()</code>, on obtient un n-uplet de quatre objets (voir ''[[../Régression_et_optimisation#Régression_linéaire|Régression_et_optimisation > Régression_linéaire]]''). On peut récupérer soit le n-uplet en entier, soit les éléments un par un. En utilisant l'exemple de la section sur la régression :
<syntaxhighlight lang="Python">
resultat = np.linalg.lstsq(X, y)
print(type(resultat))
# <class 'tuple'>
print(resultat)
# (array([4.60203769, 1.90735762]), array([3.16699277]), np.int32(2), array([5.03896036, 1.20456788]))
(a, b, c, d) = np.linalg.lstsq(X, y)
print(a, b, c, d)
# [4.60203769 1.90735762] [3.16699277] 2 [5.03896036 1.20456788]
</syntaxhighlight>
Si l'on ne veut pas d'un des objets, on peut le remplacer par le tiret de soulignement ''({{lang|en|underscore}})'' « <code>_</code> ».
<syntaxhighlight lang="Python">
(a, _, _, _) = np.linalg.lstsq(X, y)
print(a)
# [4.60203769 1.90735762]
</syntaxhighlight>
== Itérable ==
Dans Python, un « itérable » est un objet qui peut être utilisé dans une boucle <code>for</code> (voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Structures_de_contrôle|Éléments_de_programmation > Structures_de_contrôle]]''). Il s'agit de :
* liste : <code>[…]</code> ;
* n-uplet ''({{lang|en|tuple}})'' : <code>(…)</code> ;
* chaîne de caractère : <code>"…"</code> ou <code>'…'</code> ;
* d'ensemble : <code>set([…])</code> ;
* de dictionnaires : <code>dict(…)</code>
* d'objet <code>range()</code> ;
* d'objet NumPy <code>np.array()</code> ou <code>np.matrix()</code>.
Exemples :
<syntaxhighlight lang="Python">
A = [1, 2, 3]
for i in A:
print(i, end=", ")
# 1, 2, 3,
print("")
B = ("A", "B", "C")
for i in B:
print(i, end=" ")
# A, B, C,
print("")
C = "123"
for i in C:
print(i, end=" ")
# 1, 2, 3,
print("")
D = dict(a = 1, b = 2, c = 3)
for i in D:
print(i, end=" ")
# a, b, c,
print("")
</syntaxhighlight>
Le tranchage ''(slicing)'' est ''en général'' utilisable sur les itérables ; il ne s'applique pas aux ensembles et dictionnaires.
La commande <code>sorted()</code> trie les itérables par ordre croissant, à condition que les éléments soient comparables (typiquement tous des nombres ou bien tous des chaînes de caractères). Le paramètre <code>reverse=True</code> permet de trier par ordre décroissant. Notez que le résultat est forcément une liste.
<syntaxhighlight lang="Python">
A = [1, 2, 3]
A = sorted(A, reverse = True)
print(type(A), A)
# <class 'list'> [3, 2, 1]
B = ("A", "B", "C")
B = sorted(B, reverse = True)
print(type(B), B)
# <class 'list'> ['C', 'B', 'A']
C = "123"
C = sorted(C, reverse = True)
print(type(C), C)
# <class 'list'> ['3', '2', '1']
D = dict(a = 1, b = 2, c = 3)
D = sorted(D, reverse = True)
print(type(D), D)
# <class 'list'> ['c', 'b', 'a']
</syntaxhighlight>
La commande <code>enumerate()</code> renvoie la liste des éléments de l'itérable en l'associant à son indice (pour la deuxième impression, nous utilisons la définition en compréhension, voir ''[[Python pour le calcul scientifique/Éléments_de_programmation#Définition_en_compréhension|Éléments_de_programmation > Définition_en_compréhension]]'') :
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
print(list(enumerate(A)))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print([a for i, a in enumerate(A) if i % 2 == 0]) # filtre les indices pairs
# ['a', 'c']
</syntaxhighlight>
On peut utiliser un paramètre <code>start ''i''</code> pour commencer l'énumération à l'élément ''i'' + 1.
La commande <code>zip()</code> permet d'itérer sur deux itérables en parallèle.
<syntaxhighlight lang="Python">
A = ["a", "b", "c"]
B = [6, 7, 8]
for i in zip(A, B)
# ('a', 6)
# ('b', 7)
# ('c', 8)
</syntaxhighlight>
On peut utiliser une liste de booléens pour extraire une partie d'un itérable, avec la fonction <code>compress()</code> du module <code>itertools</code>.
<syntaxhighlight lang="Python">
from itertools import compress
A = [1, 2, 3, 4, 5]
booleen = [True, False, True, False, True]
print(list(compress(A, booleen)))
# [1, 3, 5]
</syntaxhighlight>
Cette fonction est beaucoup plus performante qu'une extraction itérative de type <code>[a for i, a in enumerate(A) if booleen[i]]</code> ou <code>[a for (a, b) in zip(A, booleen) if b]</code>.
{{note |Il ne faut pas confondre itérable et itérateur ''({{lang|en|iterator}})''. Un itérateur représente un flux de données, et est typiquement construit lors de l'utilisation d'une structure <code>for</code>. On peut construire directement un itérateur avec la fonction <code>iter()</code>, ou bien avec la fonction <code>reversed()</code> auquel cas le flux de données est inversé. Les itérateurs possèdent la méthode <code>__next__()</code> qui renvoie l'élément suivant (et le premier élément au premier appel).
On peut transformer un itérateur en liste ou en n-uplet, mais cela interrompt alors le flux de données (on ne peut plus utiliser <code>.__next__()</code>).
La manipulation directe d'itérateurs n'est pas très utile, mais connaître cette notion permet de mieux comprendre le fonctionnement de Python.}}
<syntaxhighlight lang="Python">
A = [1, 2, 3, 4, 5]
A = iter(A)
print(A)
# <list_iterator object at 0x00000204181AB3A0>
print(A.__next__())
# 1
print(A.__next__())
# 2
print(list(A))
# [3, 4, 5]
B = ("A", "B", "C", "D", "E")
B = reversed(B)
print(B)
# <reversed object at 0x0000020417A7E9B0>
print(B.__next__())
# E
print(B.__next__())
# D
print(tuple(B))
# ('C', 'B', 'A')
</syntaxhighlight>
== Notes et références ==
{{références}}
----
[[../|Python pour le calcul scientifique]] < [[../|↑]] > [[../Premiers programmes|Premiers programmes]]
{{DEFAULTSORT:Decouverte de Python et de Jupyter}}
[[Catégorie:Python pour le calcul scientifique (livre)]]
m98ey1bnlx1n0xdd490soatyqk4ypq5
Python pour le calcul scientifique/Manipulation de matrices
0
72889
769248
768706
2026-06-30T12:17:36Z
Cdang
1202
/* Trouver une valeur */ corr.
769248
wikitext
text/x-wiki
Les matrices sont un élément primordial du calcul scientifique sur ordinateur pour deux raisons :
# L'algèbre linéaire est au cœur de nombreux calculs.
# Les matrices sont l'élément de base du calcul vectorisé qui permet un gain de temps appréciable.
Pour pouvoir expliter les matrices, il faut charger le module NumPy ; nous utilisons également Matplotlib pour les graphiques. Ainsi, les programmes contiennent tous au début :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
== Rappels et complément sur le tranchage ==
Soit une liste L composée de ''n'' éléments.
* Les éléments sont numérotés de 0 à ''n'' – 1.
* Le premier élément s'obtient par <code lang="python">L[0]</code>.
* Le i-ème élément s'obtient par <code lang="python">L[''i'' - 1]</code>.
* L'avant-dernier élément s'obtient par <code lang="python">L[-2]</code>.
* Le dernier élément s'obtient par <code lang="python">L[-1]</code>.
* La sous-liste composée des éléments contigus ''i'' à ''j'' s'obtient par <code lang="python">L[''i'' - 1:j]</code>.
Ainsi, <code lang="python">L[0:1]</code> va extraire le premier élément, <code lang="python">L[1:-1]</code> va extraire tous les éléments sauf le premier et le dernier.
{{voir|[[Python_pour_le_calcul_scientifique/Découverte_de_Python_et_de_Jupyter#Itérable|Découverte_de_Python_et_de_Jupyter > Itérable]]}}
NumPy fournit des fonctions permettant de manipuler les matrices :
* <code lang="python">np.append(A, B)</code> : fusionne les vecteurs A et B ;<br /> s'il s'agit de matrices ou de tenseurs, la fonction les « aplatit », les transforme en vecteur ;<br />si l'on veut intégrer B dans A, on utilise <code lang="python">A = np.append(A, B)</code> ;
* <code lang="python">np.append(A, B, axis = ''i'')</code> : fusionne les tenseurs selon l'indice ''i'' (<code>0</code> pour le premier indice, <code>1</code> pour le deuxième…) ;
* <code lang="python">np.insert(A, i, m)</code> : insère le vecteur ''m'' dans le vecteur A (ou la matrice A aplatie) à l'emplacement ''i'' ;
* <code lang="python">np.insert(A, i, M, axis = ''j'')</code> : insère le tenseur M dans le tenseur A à l'emplacement ''i'' de l'indice ''j'' ;
* <code lang="python">np.delete(A, I)</code> : efface les éléments définis par le tranchage I du vecteur A (ou de la matrice A aplatie) ;
* <code lang="python">np.delete(A, I, axis = ''j'')</code> : efface les éléments définis par le tranchage I selon l'indice ''j'' du tenseur A.
<syntaxhighlight lang="Python">
A = np.array([[1]])
B = np.array([[2, 3, 4]])
C = np.append(A, B, axis=1)
print(A, B, C, sep="\n")
# [[1]]
# [[2 3 4]]
# [[1 2 3 4]]
D = np.array([[10, 20, 30, 40]])
E = np.append(C, D, axis=0)
print(E)
# [[ 1 2 3 4]
# [10 20 30 40]]
</syntaxhighlight>
On peut utiliser <code>np.r_[A, B]</code> pour concaténer A et B en ligne ''(row), et <code>np.c_[A, B]</code> pour les concaténer en colonne.
On peut extraire une sous-matrice à partir d'une matrice de booléens :
<syntaxhighlight lang="Python">
A = np.array([[1, 2], [3, 4], [5, 6]])
booleen = np.logical_or(A==1, A==3)
print(booleen)
# [[ True False]
# [ True False]
# [ False False]]
print(A[booleen])
# [1 3]
booleen = np.logical_or(A[:, 0]==1, A[:, 0]==3)
print(booleen)
# [ True True False]
print(A[booleen])
# [[1 2]
# [3 4]]
print(A[booleen][:, 1])
# [2 4]
</syntaxhighlight>
== Différence entre ''array'' et ''matrix'' ==
Il existe deux types d'objet NumPy pour décrire les matrices : les objets ''array'' (tableau, classe <code>ndarray</code>) et les objets ''matrix'' (matrice, classe <code>matrix</code>).
<syntaxhighlight lang="Python">
A = np.array([[1, 2], [3, 4], [5, 6]])
B = np.matrix([[1, 2], [3, 4], [5, 6]])
</syntaxhighlight>
Il y a trois différences :
* les objets ''array'' peuvent être de n'importe quelle dimension : 0 (scalaire), 1 (vecteur), 2 (matrice), 3 (tenseur d'ordre 3)… alors qu'un objet ''matrix'' est nécessairement de dimension 2 ;
* les opération sur les objets ''matrix'' sont par défaut des opérations matricielles ; ainsi, la multiplication <code>A * B</code> va être une multiplication terme à terme si A et B sont des ''array'', et une multiplication matricielle si A et B sont des ''matrix'' ; pour avoir la multiplication matricielle entre ''array'', il faut utiliser <code>a@b</code> ou <code>np.dot(a,b)</code> ;
* si une matrice A est inversible, alors avec un objet ''matrix'', on peut utiliser la méthode <code>A.I</code> ; si A est un objet ''array'', il faut utiliser <code>np.linalg.inv(A)</code>.
La classe <code>matrix</code> a été dépréciée, il est recommandé de n'utiliser que la classe <code>ndarray</code>. Nous n'utiliserons donc pas la classe <code>matrix</code>.
== Définir un tenseur ==
Un tenseur est similaire à une liste mais il est défini par la fonction <code>np.array()</code>. La définition et l'extraction de composante utilise la méthode du découpage en tranches ''({{lang|en|slicing}})''.
'''Exemples'''
<syntaxhighlight lang="python">
a = np.array([1, 3, 5, 7]) # vecteur
bc = np.array([[1], [2], [3], [4]]) # matrice 4 × 1 (matrice colonne)
bl = np.array([[1, 2, 3, 4]]) # matrice 1 × 4 (matrice ligne)
c = np.array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]]) # matrice 3 × 3
d = np.array([[[1, 2, 3],
[2, 3, 4]],
[[10, 9, 8],
[ 7, 6, 5]]]) # tenseur d'ordre 3, de dimension 3 × 2 × 2
</syntaxhighlight>
Notez que dans NumPy, un vecteur n'est pas la même chose qu'une matrice ligne ou colonne. Un vecteur de dimension ''n'' est un tenseur d'ordre 1 et de dimension ''n'' ; une matrice ligne ou colonne est un tenseur d'ordre 2 et de dimension 1 × ''n'' ou ''n'' × 1.
<syntaxhighlight lang="python">
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3]])
c = np.array([[1], [2], [3]])
print(a.size, b.size, c.size) # 3 3 3
print(a.ndim, b.ndim, c.ndim) # 1 2 2
print(a.shape, b.shape, c.shape) # (3,) (1, 3) (3, 1)
</syntaxhighlight>
La fonction <code>np.arange()</code> est similaire à la fonction <code>range()</code> pour les liste ; elle génère un vecteur de réels. La fonction <code>np.linspace()</code> permet également de créer un vecteur de même type, mais on indique le dernier nombre alors que la règle du découpage en tranches fait que le nombre maximal indiqué à <code>np.arange()</code> est le premier nombre qui ne ''figure pas'' dans le vecteur.). La fonction <code>np.zeros()</code> génère une matrice nulle, <code>np.zeros_like()</code> une matrice nulle ayant les dimensions d'une matrice fournie comme modèle. De même, <code>np.ones()</code> et <code>np.ones_like()</code> crée des matrices, dont toutes les composantes sont à 1. La fonction <code>np.eye()</code> crée une matrice unité.
'''Exemples'''
<syntaxhighlight lang="python">
e = np.arange(0, 2, 0.1) # vecteur [0, 0.1, 0.2…, 1.8, 1.9]
f = np.linspace(0, 2, 5) # 5 nombres entre 0 et 2 soit le vecteur [0, 0.5, 1, 1.5, 2]
g = np.zeros(3) # vecteur nul de dimension 3
h = np.zeros((3, 3)) # matrice nulle 3 × 3
k = np.ones_like(a) # matrice de 1 de même dimension que a
u = np.eye(3) # matrice unité 3 × 3
</syntaxhighlight>
Le paramètre <code>dtype</code> permet de forcer le type. Par exemple
<syntaxhighlight lang="python">
a = np.array([1, 2, 3], dtype="complex")
k = np.ones_like(a, dtype="int")
</syntaxhighlight>
La commande <code>np.linspace()</code> peut créer des matrices colonne : on donne la première et la dernière ligne ; par exemple : :
<syntaxhighlight lang="python">
np.linspace([1, -1], [10, -10], 4)
# [[ 1. -1.]
# [ 4. -4.]
# [ 7. -7.]
# [ 10. -10.]]
</syntaxhighlight>
Les commandes <code>np.geomspace()</code> et <code>np.geomspace()</code> fonctionnent comme <code>np.linspace()</code>, mais avec une progression logarithmique. La commande <code>np.geomspace(a, b, n)</code> crée un vecteur (ou une matrice colonne) allant de ''a'' à ''b'' alors que <code>np.logspace(a, b, n)</code> crée un vecteur (ou une matrice colonne) allant de 10<sup>''a''</sup> à 10<sup>''b''</sup>.
La méthode <code>.reshape()</code> remet en forme une matrice. Par exemple, pour transformer un vecteur de dimension 9 en une matrice 3 × 3 :
<syntaxhighlight lang="python">
a = np.arange(1, 10)
b = a.reshape(3, 3)
# ou bien directement
c = np.arange(1, 10).reshape(3, 3)
</syntaxhighlight>
Avec la méthode <code>.reshape()</code>, on peut utiliser la valeur –1 pour une des dimensions ; sa valeur est alors automatiquement calculée en fonction du nombre d'éléments et de l'autre dimension. On peut aussi utiliser une dimension vide ; cela crée alors un vecteur. Par exemple, pour une matrice M quelconque :
<syntaxhighlight lang="python">
M.reshape(-1, 1) # crée une matrice colonne
M.reshape(1, -1) # crée une matrice ligne
M.reshape(-1,) # crée un vecteur
</syntaxhighlight>
La méthode <code>.fill()</code> remplit la matrice avec un scalaire :
<syntaxhighlight lang="python">
b.fill(5) # remplace les valeurs de b par la valeur 5
</syntaxhighlight>
== Extraction matricielle ==
Si l'on veut extraire les colonnes 1 et 3 pour toutes les lignes d'une matrice M, on utilise :
<syntaxhighlight lang="python">
M[:, [0, 2]]
</syntaxhighlight>
== Trouver une valeur ==
Pour trouver une valeur, on utilise la fonction <code>where()</code> :
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
print(A)
# [[1 2]
# [3 4]]
B = np.where(A == 3)
print(B)
# (array([1]), array([0])
print(B[0][0], B[1][0])
# 1 0
C = np.where(A == 5)
print(C)
# (array([], dtype=int64), array([], dtype=int64))
print(len(C[0]))
# 0
</syntaxhighlight>
Notez que <code>where()</code> peut servir à construire une matrice à partir de deux autres matrices selon une condition. Par exemple, pour comparer les éléments deux à deux et sélectionner le plus grand :
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
B = np.array([[0, 1], [4, 5]])
C = np.where(A > B, A, B)
print(C)
# [[1 2]
# [4 5]
</syntaxhighlight>
La syntaxyte générale est <code>C = np.where(condition, A, B)</code> où <condition</code> est une matrice de booléens ; pour un indice (''i'', ''j''), si <code>condition[i, j]</code> est vrai, alors <code>C[i, j]</code> vaut <code>A[i, j]</code>, sinon elle vaut <code>B[i, j]</code>.
== Assemblage de matrices ==
Si l'on veut regrouper deux matrices, on utilise la commande <code>np.concatenate()</code>. On utilise le paramètre ''axis'' pour indiquer si l'on empile les matrices l'une au-dessus de l'autre (<code>axis=0</code>) ou bien l'une derrière l'autre (<code>axis=1</code>). Par exemple :
<syntaxhighlight lang="python">
A = np.array([[1 ,2], [3, 4]])
B = np.array([[5 ,6], [7, 8]])
C = np.concatenate((A, B), axis = 0)
# [[1 2]
# [3 4]
# [5 6]
# [7 8]]
D = np.concatenate((A, B), axis = 1)
# [[1 2 5 6]
# [3 4 7 8]]
</syntaxhighlight>
Si l'on veut transformer deux vecteurs en une matrice de deux colonnes, chaque vecteur occupant une colonne :
<syntaxhighlight lang="python">
A = np.array([1 ,2])
B = np.array([3 ,4])
C = np.concatenate((A.reshape(-1, 1), B.reshape(-1, 1)), axis = 1)
# [[1 3]
# [2 4]]
</syntaxhighlight>
== Opérations matricielles ==
Les quatre opérations classiques <code lang="python>+</code>, <code lang="python>-</code> et <code lang="python>/</code> ne fonctionnent qu'entre tenseurs de mêmes dimensions et sont des opérations élément par élément ''({{lang|en|elementwise operations}})'' :
* <code lang="python">(A + B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] + B[i, j, k]</code> ;
* <code lang="python">(A - B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] - B[i, j, k]</code> ;
* <code lang="python">(A / B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] / B[i, j, k]</code>.
La multiplication élément par élément se fait avec
: <code lang="python">np.multiply(A, B)</code> qui vaut <code lang="python">A[i, j, k] * B[i, j, k]</code>.
De même, les fonctions <code lang="python>np.add()</code>, <code lang="python>np.subtract()</code>, <code lang="python>np.multiply()</code> et <code lang="python>np.divide()</code> effectuent des opérations élément par élément sur des tenseurs de mêmes dimensions :
* <code lang="python">np.add(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] + B[i, j, k]</code> ;
* <code lang="python">np.subtract(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] - B[i, j, k]</code> ;
* <code lang="python">np.multiply(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] * B[i, j, k]</code> ;
* <code lang="python">np.divide(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] / B[i, j, k]</code>.
La multiplication matricielle, au sens de l'algèbre linéaire, se fait avec les fonctions <code lang="python">np.dot()</code> ou <code lang="python">np.matmul()</code>, ou bien avec l'opérateur <code>@</code>.
<syntaxhighlight lang="python">
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(a @ b) # np.matmul(a, b)
# [[19 22]
# [43 50]]
</syntaxhighlight>
Pour un poduit scalaire :
<syntaxhighlight lang="python">
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
# 32
</syntaxhighlight>
Notez que :
* pour le produit par un scalaire, les fonctions <code lang="python">np.multiply()</code> et l'opérateur <code lang="python">*</code> sont plus performants ;
* la fonction <code lang="python">np.dot()</code> est plus performante pour le produit scalaire de deux vecteurs réels ;
* lorsque l'on a des vecteurs complexes, la fonction <code lang="python">np.vdot()</code> fait le produit par le conjugué du premier membre (<code lang="python">np.vdot(a, b) == np.dot(a.conj(), b)</code>) ;
* la fonction <code lang="python">np.matmul()</code> et l'opérateur <code lang="python">@</code> (<code lang="python">A @ B</code>) sont plus performants pour un produit matriciel.
L'opérateur <code>@=</code> fait un produit matriciel en modifiant la variable elle-même (à l'image de <code>*=</code> pour les nombres).
== Calcul vectorisé ==
Les fonctions de NumPy traitent en général les matrices en entier. Ainsi, il n'est pas nécessaire de créer une boucle pour faire défiler les indices un par un. Il en résulte un code clair et compact et surtout un plus grande rapidité d'exécution. Par exemple :
<syntaxhighlight lang="python">
x = np.linspace(0, 2*np.pi, 50) # 50 points entre 0 et 2π
y = np.sin(x)
plt.plot(x, y)
</syntaxhighlight>
La variable <code>x</code> est un vecteur de 50 valeurs et il est traité en une seule passe par la fonction sinus <code>np.sin()</code>.
Outre le tranchage ''({{lang|en|slicing}})'', on peut utiliser deux autres méthodes pour extraire certaines valeurs d'une matrice :
* utiliser un vecteur ou une matrice d'indices, Python extrait alors les valeurs correspondant aux indices ;
* utiliser un vecteur ou une matrice de booléens de même dimension que a matrice ; Python extrait alors les valeurs correspondant aux <code>True</code>, la matrice booléenne est un « masque » pour la matrice d'origine. Par exemple :
<syntaxhighlight lang="python">
a = np.arange(0, 10)
b = np.array([1, 3, 5, 7, 9])
c = np.array([True, True, False, False, True, False, True, False, False, True])
print(a[b], "\n", a[c])
</syntaxhighlight>
Si l'on veut inverser tous les éléments d'une matrice de bolléens, il faut utiliser la fonction <code>np.logical_not()</code>
'''Exercice'''
Écrire un programme Python mettant en œuvre le [[w:crible d'Érathostène|crible d'Érathostène]] pour trouver les nombres premiers inférieurs à une valeur donnée.
{{boîte déroulante début|Solution}}
<syntaxhighlight lang="python">
#!/usr/bin/env python
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
# ***************
# ***************
# ** Fonctions **
# ***************
# ***************
def eratosthene(limite):
# Détermine la liste des nombres premiers entre 1 et N
# par le crible d'Ératosthène
# Entrées : limite : nombre entier, N
# Sorties : liste : vecteur d'entiers,liste des nombres premiers
indices = (np.ones(limite) == 1) # vecteur de booléens tous à True
# à la fin, indice(i-1) est True si i est premier, False sinon
indices[0]=False # 1 n'est pas premier
imax = int(limite)
i = 2 # initialisation
repete = (i <= imax)
while repete:
if indices[i-1]:
jmax = int(limite/i)
j = np.arange(1, jmax)+1
indices[i*j-1]=False # élimination des multiples de i
test = (i*jmax == imax)
i = i + 1
repete = i*i < limite # condition d'arrêt
liste0 = np.arange(limite)
liste = liste0[indices]+1
return liste
# *************************
# *************************
# ** Programme principal **
# *************************
# *************************
print("***** Recherche de nombres premiers par le crible d'Ératosthène *****\n")
nmax = eval(input("Entrez la valeur maximale : "))
resultat = eratosthene(nmax)
print("\n", resultat.shape[0], "nombres premiers entre 1 et", nmax, ":\n")
print(resultat)
plt.plot(resultat, np.zeros_like(resultat), "|")
</syntaxhighlight>
L'extraction par un vecteur d'indice intervient dans l'instruction :
<syntaxhighlight lang="python">
indices[i*j-1]=False
</syntaxhighlight>
qui élimine en une seule passe tous les multiples de ''i''. L'extraction par un vecteur booléen intervient dans l'instruction :
<syntaxhighlight lang="python">
liste = liste0[indices]+1
</syntaxhighlight>
qui permet d'extraire toutes la valeurs conservées en une seule passe.
{{boîte déroulante fin}}
== Attributs ==
La classe <code>ndarray</code>, qui définit les matrices, possède un certain nombre d'attributs :
* <code>.shape</code> : dimensions de la matrice ;
* <code>.ndim</code> : ordre du tenseur ;
* <code>.size</code> : nombre d'éléments ;
* <code>.dtype</code> : type des éléments.
<syntaxhighlight lang="python">
a = np.linspace(1, 9, 9)
print("a", a, "\n",
" ; shape :", a.shape,
" ; dim : ", a.ndim,
" ; size : ", a.size,
" ; dtype : ", a.dtype, "\n")
</syntaxhighlight>
* <code>.real</code>, <code>.imag</code> : parties réelle et imaginaire de la matrice ;
* <code>.flat</code> : liste des éléments de la matrice ; les éléments sont réorganisés en une liste ;
* <code>.T</code> : transposée.
<syntaxhighlight lang="python">a = np.arange(0, 9).reshape(3, 3)
print(a)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
print(a.T)
# [[0 3 6]
# [1 4 7]
# [2 5 8]]
print(a.flat[:])
# array([0, 1, 2, 3, 4, 5, 6, 7, 8])
</syntaxhighlight>
; Ressources
: Section « Attribute », {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html
| titre = numpy.ndarray
| site = Numpy and Scipy Documentation
| consulté le = 2019-03-16
}}
== Fonctions et méthodes de base ==
La classe <code>ndarray</code> possède un certain nombre de méthodes :
* <code>.min()</code> et <code>.max()</code> : valeurs respectivement minimale et maximale ;
* <code>.ptp()</code> : amplitude « max – min » ''({{lang|en|peak to peak}})'' ;
* <code>.argmin()</code> et <code>argmax()</code> : indice où se trouvent les valeurs respectivement minimale et maximale ;
* <code>.sum()</code>, <code>prod()</code> : somme et produit de tous les éléments de la matrice ;
* <code>.cumsum()</code>, <code>cumprod()</code> : somme et produit cumulés.
<syntaxhighlight lang="python">
a = np.linspace(1, 9, 9)
print("min : ", a.min(),
"; max : ", a.max(), "\n",
"sum : ", a.sum(),
"; cumsum : ", a.cumsum(), "\n",
"prod : ", a.prod(),
"; cumprod : ", a.cumprod(), "\n")
</syntaxhighlight>
Méthodes statistiques :
* <code>.mean()</code> : moyenne ;
* <code>.std()</code> : écart type ''({{lang|en|standard deviation}})''.
{{loupe|../Statistiques}}
Extraction de données :
* <code>.diagonal()</code> : vecteur contenant les éléments de la diagonale ;
* <code>.flatten()</code> : matrice « aplatie », c'est-à-dire vecteur contenant les éléments réorganisés en liste ; par rapport à l'attribut <code>.flat</code>, on peut choisir le sens de linéarisation (par lignes, <code>.flatten(C)</code>, ou par colonnes, <code>.flatten(F)</code>) mais cela crée une copie, on ne peut pas par exemple s'en servir pour modifier la matrice ;
* <code>.tofile()</code> : crée un fichier texte contenant les valeurs de la matrice ; par exemple, pour une matrice <code>a</code> et pour séparer les valeurs par un point-virgule :
<syntaxhighlight lang="python">
a.tofile("matriceA.txt", sep=" ; ")
</syntaxhighlight>
* <code>.astype(''type'')</code> : copie la matrice en convertissant le type de données :
<syntaxhighlight lang="python">
a = a.astype(float) # pour avoir une matrice de réels en virgule flottante
a = a.astype(str) # pour avoir une matrice de chaînes de caractères
</syntaxhighlight>
Tri :
* <code>np.sort(M, i)</code> : crée une copie et trie la matrice selon l'axe ''i'' (0 pour le premier indice, 1 pour le deuxième… la valeur par défaut est –1 pour le dernier indice, la valeur ''none'' aplatit la matrice) ; <code>np.sort(M, 0)</code> trie chaque colonne indépendamment par ordre croissant, <code>np.sort(M, 1)</code> trie chaque ligne indépendamment par ordre croissant ;
* <code>M.sort(i)</code> : cette méthode trie la matrice en elle-même ;
* <code>np.argsort(M, i)</code> : crée une matrice contenant le nouvel indice, selon l'axe ''i'', de chaque élément.
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5]])
M.sort(1) # tri des lignes indépendamment -> [[1, 5, 5, 7], [2, 3, 4, 9], [1, 5, 7, 9]]
</syntaxhighlight>
Pour trier les lignes selon la deuxième colonne d'une matrice, tout en conservant les lignes intactes, on peut faire comme suit :
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5]])
ind = np.argsort(M[:, 1]) # indices de tri selon la 2e colonne
N = M[ind, :] # réarrangement des lignes -> [[9, *1*, 7, 5], [1, *5*, 7, 5], [2, *9*, 4, 3]]
</syntaxhighlight>
Pour faire un tri lexicographique, on utilise la fonction <code>np.lexsort()</code> en indiquant les différentes colonnes :
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5], [2, 9, 8, 5]])
ind = np.lexsort((M[:, 3], M[:, 2], M[:, 1], M[:, 0])) # indices de tri selon la 1re, puis la 2e, puis la 3e, puis la 4e colonne
N = M[ind, :] # réarrangement des lignes -> [[1, 5, 7, 5], [2, 9, 4, 3], [2, 9, 8, 5], [9, 1, 7, 5]]
</syntaxhighlight>
Le tri se fait par ordre croissant. Pour trier par ordre décroissant, on inverse l'ordre de la matrice en faisant une extraction avec un pas de moins un, par exemple pour inverser les lignes :
<syntaxhighlight lang="python">
M = M[:, ::-1]
</syntaxhighlight>
Algèbre linéaire :
* <code>a.dot(b)</code> : produit matriciel ''a''⋅''b'' ; on peut aussi écrire <code>a@b</code> ;
* <code>.trace()</code> : trace de la matrice (somme des éléments diagonaux) ;
* <code>.transpose()</code> : transpose la matrice, résultat similaire à l'attribut <code>.T</code> ;
* <code>np.cross()</code> : produit vectoriel dans ℝ³.
{{loupe|../Algèbre linéaire}}
Matrices de booléens :
* <code>.all()</code> : applique un « et » logique à toutes les valeurs de la matrice ;
* <code>.any()</code> : applique un « ou » logique à toutes les valeurs de la matrice.
{{loupe|../Fonctions mathématiques générales#Fonctions booléennes}}
Autre méthodes :
* <code>.conj()</code> : conjugué des valeurs complexes ;
* <code>.nonzero()</code> : n-uplet contenant les indices des valeurs non-nulles ;
* <code>.round(n)</code> : arrondit les valeurs à la ''n''-ième décimale.
; Ressources
: Section « Method », {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html
| titre = numpy.ndarray
| site = Numpy and Scipy Documentation
| consulté le = 2019-03-16
}}
== Propagation ==
Le terme « propagation » ''({{lang|en|broadcasting}})'' désigne la manière dont Python complète les matrice lorsque des dimensions manquent.
Supposons que l'on veuille additionner deux matrices M<sub>1</sub> et M<sub>2</sub> de dimensions ''m''<sub>1</sub> × ''n''<sub>1</sub> et ''m''<sub>2</sub> × ''n''<sub>2</sub> différentes. Alors :
* le résultat a pour dimension max(''m''<sub>1</sub>, ''m''<sub>2</sub>) × max(''n''<sub>1</sub>, ''n''<sub>2</sub>) ;
* si une des dimensions vaut 1, alors les valeurs de l'autre dimension sont dupliquées ;
* sinon, les dimensions manquantes pour chaque matrice sont complétées par des 1.
Par exemple :
: <math>\mathrm{A} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
: <math>5 + \mathrm{A} = \begin{pmatrix} 5 & 5 \\ 5 & 5 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
:: La matrice (5) est de dimension 1 × 1, la valeur « 5 » est donc répétée dans les deux dimensions
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
print(5 + A)
# [[6 7]
# [7 8]]
</syntaxhighlight>
: <math>(5, 4) + \mathrm{A} = \begin{pmatrix} 5 & 4 \\ 5 & 4 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
<syntaxhighlight lang="python">
print(np.array([[5, 4]]) + A)
# [[6 6]
# [6 8]]
</syntaxhighlight>
: <math>\begin{pmatrix} 5 \\ 4 \end{pmatrix} + \mathrm{A} = \begin{pmatrix} 5 & 5 \\ 4 & 4 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
<syntaxhighlight lang="python">
print(np.array([[5], [4]]) + A)
# [[6 7]
# [7 8]]
</syntaxhighlight>
== Fonctions « universelles » ==
Les fonctions universelles ''({{lang|en|ufunc}})'' sont les fonctions s'appliquant aux matrices, des fonctions vectorisées.
; Ressource
: {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs
| titre = Available ufuncs
| site = SciPy documentation
| consulté le = 2019-03-21
}}
== Algèbre linéaire ==
{{loupe|../Algèbre linéaire}}
== Notes et références ==
{{références}}
----
[[../Graphiques|Graphiques]] < [[../|↑]] > [[../Polynômes|Polynômes]]
[[Catégorie:Python pour le calcul scientifique (livre)]]
r21iyanvz2zwkcmec3wogltj0x2o13m
769249
769248
2026-06-30T12:22:32Z
Cdang
1202
/* Trouver une valeur */ précisions
769249
wikitext
text/x-wiki
Les matrices sont un élément primordial du calcul scientifique sur ordinateur pour deux raisons :
# L'algèbre linéaire est au cœur de nombreux calculs.
# Les matrices sont l'élément de base du calcul vectorisé qui permet un gain de temps appréciable.
Pour pouvoir expliter les matrices, il faut charger le module NumPy ; nous utilisons également Matplotlib pour les graphiques. Ainsi, les programmes contiennent tous au début :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
== Rappels et complément sur le tranchage ==
Soit une liste L composée de ''n'' éléments.
* Les éléments sont numérotés de 0 à ''n'' – 1.
* Le premier élément s'obtient par <code lang="python">L[0]</code>.
* Le i-ème élément s'obtient par <code lang="python">L[''i'' - 1]</code>.
* L'avant-dernier élément s'obtient par <code lang="python">L[-2]</code>.
* Le dernier élément s'obtient par <code lang="python">L[-1]</code>.
* La sous-liste composée des éléments contigus ''i'' à ''j'' s'obtient par <code lang="python">L[''i'' - 1:j]</code>.
Ainsi, <code lang="python">L[0:1]</code> va extraire le premier élément, <code lang="python">L[1:-1]</code> va extraire tous les éléments sauf le premier et le dernier.
{{voir|[[Python_pour_le_calcul_scientifique/Découverte_de_Python_et_de_Jupyter#Itérable|Découverte_de_Python_et_de_Jupyter > Itérable]]}}
NumPy fournit des fonctions permettant de manipuler les matrices :
* <code lang="python">np.append(A, B)</code> : fusionne les vecteurs A et B ;<br /> s'il s'agit de matrices ou de tenseurs, la fonction les « aplatit », les transforme en vecteur ;<br />si l'on veut intégrer B dans A, on utilise <code lang="python">A = np.append(A, B)</code> ;
* <code lang="python">np.append(A, B, axis = ''i'')</code> : fusionne les tenseurs selon l'indice ''i'' (<code>0</code> pour le premier indice, <code>1</code> pour le deuxième…) ;
* <code lang="python">np.insert(A, i, m)</code> : insère le vecteur ''m'' dans le vecteur A (ou la matrice A aplatie) à l'emplacement ''i'' ;
* <code lang="python">np.insert(A, i, M, axis = ''j'')</code> : insère le tenseur M dans le tenseur A à l'emplacement ''i'' de l'indice ''j'' ;
* <code lang="python">np.delete(A, I)</code> : efface les éléments définis par le tranchage I du vecteur A (ou de la matrice A aplatie) ;
* <code lang="python">np.delete(A, I, axis = ''j'')</code> : efface les éléments définis par le tranchage I selon l'indice ''j'' du tenseur A.
<syntaxhighlight lang="Python">
A = np.array([[1]])
B = np.array([[2, 3, 4]])
C = np.append(A, B, axis=1)
print(A, B, C, sep="\n")
# [[1]]
# [[2 3 4]]
# [[1 2 3 4]]
D = np.array([[10, 20, 30, 40]])
E = np.append(C, D, axis=0)
print(E)
# [[ 1 2 3 4]
# [10 20 30 40]]
</syntaxhighlight>
On peut utiliser <code>np.r_[A, B]</code> pour concaténer A et B en ligne ''(row), et <code>np.c_[A, B]</code> pour les concaténer en colonne.
On peut extraire une sous-matrice à partir d'une matrice de booléens :
<syntaxhighlight lang="Python">
A = np.array([[1, 2], [3, 4], [5, 6]])
booleen = np.logical_or(A==1, A==3)
print(booleen)
# [[ True False]
# [ True False]
# [ False False]]
print(A[booleen])
# [1 3]
booleen = np.logical_or(A[:, 0]==1, A[:, 0]==3)
print(booleen)
# [ True True False]
print(A[booleen])
# [[1 2]
# [3 4]]
print(A[booleen][:, 1])
# [2 4]
</syntaxhighlight>
== Différence entre ''array'' et ''matrix'' ==
Il existe deux types d'objet NumPy pour décrire les matrices : les objets ''array'' (tableau, classe <code>ndarray</code>) et les objets ''matrix'' (matrice, classe <code>matrix</code>).
<syntaxhighlight lang="Python">
A = np.array([[1, 2], [3, 4], [5, 6]])
B = np.matrix([[1, 2], [3, 4], [5, 6]])
</syntaxhighlight>
Il y a trois différences :
* les objets ''array'' peuvent être de n'importe quelle dimension : 0 (scalaire), 1 (vecteur), 2 (matrice), 3 (tenseur d'ordre 3)… alors qu'un objet ''matrix'' est nécessairement de dimension 2 ;
* les opération sur les objets ''matrix'' sont par défaut des opérations matricielles ; ainsi, la multiplication <code>A * B</code> va être une multiplication terme à terme si A et B sont des ''array'', et une multiplication matricielle si A et B sont des ''matrix'' ; pour avoir la multiplication matricielle entre ''array'', il faut utiliser <code>a@b</code> ou <code>np.dot(a,b)</code> ;
* si une matrice A est inversible, alors avec un objet ''matrix'', on peut utiliser la méthode <code>A.I</code> ; si A est un objet ''array'', il faut utiliser <code>np.linalg.inv(A)</code>.
La classe <code>matrix</code> a été dépréciée, il est recommandé de n'utiliser que la classe <code>ndarray</code>. Nous n'utiliserons donc pas la classe <code>matrix</code>.
== Définir un tenseur ==
Un tenseur est similaire à une liste mais il est défini par la fonction <code>np.array()</code>. La définition et l'extraction de composante utilise la méthode du découpage en tranches ''({{lang|en|slicing}})''.
'''Exemples'''
<syntaxhighlight lang="python">
a = np.array([1, 3, 5, 7]) # vecteur
bc = np.array([[1], [2], [3], [4]]) # matrice 4 × 1 (matrice colonne)
bl = np.array([[1, 2, 3, 4]]) # matrice 1 × 4 (matrice ligne)
c = np.array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]]) # matrice 3 × 3
d = np.array([[[1, 2, 3],
[2, 3, 4]],
[[10, 9, 8],
[ 7, 6, 5]]]) # tenseur d'ordre 3, de dimension 3 × 2 × 2
</syntaxhighlight>
Notez que dans NumPy, un vecteur n'est pas la même chose qu'une matrice ligne ou colonne. Un vecteur de dimension ''n'' est un tenseur d'ordre 1 et de dimension ''n'' ; une matrice ligne ou colonne est un tenseur d'ordre 2 et de dimension 1 × ''n'' ou ''n'' × 1.
<syntaxhighlight lang="python">
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3]])
c = np.array([[1], [2], [3]])
print(a.size, b.size, c.size) # 3 3 3
print(a.ndim, b.ndim, c.ndim) # 1 2 2
print(a.shape, b.shape, c.shape) # (3,) (1, 3) (3, 1)
</syntaxhighlight>
La fonction <code>np.arange()</code> est similaire à la fonction <code>range()</code> pour les liste ; elle génère un vecteur de réels. La fonction <code>np.linspace()</code> permet également de créer un vecteur de même type, mais on indique le dernier nombre alors que la règle du découpage en tranches fait que le nombre maximal indiqué à <code>np.arange()</code> est le premier nombre qui ne ''figure pas'' dans le vecteur.). La fonction <code>np.zeros()</code> génère une matrice nulle, <code>np.zeros_like()</code> une matrice nulle ayant les dimensions d'une matrice fournie comme modèle. De même, <code>np.ones()</code> et <code>np.ones_like()</code> crée des matrices, dont toutes les composantes sont à 1. La fonction <code>np.eye()</code> crée une matrice unité.
'''Exemples'''
<syntaxhighlight lang="python">
e = np.arange(0, 2, 0.1) # vecteur [0, 0.1, 0.2…, 1.8, 1.9]
f = np.linspace(0, 2, 5) # 5 nombres entre 0 et 2 soit le vecteur [0, 0.5, 1, 1.5, 2]
g = np.zeros(3) # vecteur nul de dimension 3
h = np.zeros((3, 3)) # matrice nulle 3 × 3
k = np.ones_like(a) # matrice de 1 de même dimension que a
u = np.eye(3) # matrice unité 3 × 3
</syntaxhighlight>
Le paramètre <code>dtype</code> permet de forcer le type. Par exemple
<syntaxhighlight lang="python">
a = np.array([1, 2, 3], dtype="complex")
k = np.ones_like(a, dtype="int")
</syntaxhighlight>
La commande <code>np.linspace()</code> peut créer des matrices colonne : on donne la première et la dernière ligne ; par exemple : :
<syntaxhighlight lang="python">
np.linspace([1, -1], [10, -10], 4)
# [[ 1. -1.]
# [ 4. -4.]
# [ 7. -7.]
# [ 10. -10.]]
</syntaxhighlight>
Les commandes <code>np.geomspace()</code> et <code>np.geomspace()</code> fonctionnent comme <code>np.linspace()</code>, mais avec une progression logarithmique. La commande <code>np.geomspace(a, b, n)</code> crée un vecteur (ou une matrice colonne) allant de ''a'' à ''b'' alors que <code>np.logspace(a, b, n)</code> crée un vecteur (ou une matrice colonne) allant de 10<sup>''a''</sup> à 10<sup>''b''</sup>.
La méthode <code>.reshape()</code> remet en forme une matrice. Par exemple, pour transformer un vecteur de dimension 9 en une matrice 3 × 3 :
<syntaxhighlight lang="python">
a = np.arange(1, 10)
b = a.reshape(3, 3)
# ou bien directement
c = np.arange(1, 10).reshape(3, 3)
</syntaxhighlight>
Avec la méthode <code>.reshape()</code>, on peut utiliser la valeur –1 pour une des dimensions ; sa valeur est alors automatiquement calculée en fonction du nombre d'éléments et de l'autre dimension. On peut aussi utiliser une dimension vide ; cela crée alors un vecteur. Par exemple, pour une matrice M quelconque :
<syntaxhighlight lang="python">
M.reshape(-1, 1) # crée une matrice colonne
M.reshape(1, -1) # crée une matrice ligne
M.reshape(-1,) # crée un vecteur
</syntaxhighlight>
La méthode <code>.fill()</code> remplit la matrice avec un scalaire :
<syntaxhighlight lang="python">
b.fill(5) # remplace les valeurs de b par la valeur 5
</syntaxhighlight>
== Extraction matricielle ==
Si l'on veut extraire les colonnes 1 et 3 pour toutes les lignes d'une matrice M, on utilise :
<syntaxhighlight lang="python">
M[:, [0, 2]]
</syntaxhighlight>
== Trouver une valeur ==
Pour trouver une valeur, on utilise la fonction <code>where()</code> :
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
print(A)
# [[1 2]
# [3 4]]
B = np.where(A == 3)
print(B)
# (array([1]), array([0])
print(B[0][0], B[1][0])
# 1 0
C = np.where(A == 5)
print(C)
# (array([], dtype=int64), array([], dtype=int64))
# C est un n-uplet (tuple) contenant deux vecteurs d'entiers vides.
print(len(C[0])) # taille du premier vecteur du n-uplet C
# 0
</syntaxhighlight>
Notez que <code>where()</code> peut servir à construire une matrice à partir de deux autres matrices selon une condition. Par exemple, pour comparer les éléments deux à deux et sélectionner le plus grand :
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
B = np.array([[0, 1], [4, 5]])
C = np.where(A > B, A, B)
print(C)
# [[1 2]
# [4 5]
</syntaxhighlight>
La syntaxyte générale est <code>C = np.where(condition, A, B)</code> où <condition</code> est une matrice de booléens ; pour un indice (''i'', ''j''), si <code>condition[i, j]</code> est vrai, alors <code>C[i, j]</code> vaut <code>A[i, j]</code>, sinon elle vaut <code>B[i, j]</code>.
== Assemblage de matrices ==
Si l'on veut regrouper deux matrices, on utilise la commande <code>np.concatenate()</code>. On utilise le paramètre ''axis'' pour indiquer si l'on empile les matrices l'une au-dessus de l'autre (<code>axis=0</code>) ou bien l'une derrière l'autre (<code>axis=1</code>). Par exemple :
<syntaxhighlight lang="python">
A = np.array([[1 ,2], [3, 4]])
B = np.array([[5 ,6], [7, 8]])
C = np.concatenate((A, B), axis = 0)
# [[1 2]
# [3 4]
# [5 6]
# [7 8]]
D = np.concatenate((A, B), axis = 1)
# [[1 2 5 6]
# [3 4 7 8]]
</syntaxhighlight>
Si l'on veut transformer deux vecteurs en une matrice de deux colonnes, chaque vecteur occupant une colonne :
<syntaxhighlight lang="python">
A = np.array([1 ,2])
B = np.array([3 ,4])
C = np.concatenate((A.reshape(-1, 1), B.reshape(-1, 1)), axis = 1)
# [[1 3]
# [2 4]]
</syntaxhighlight>
== Opérations matricielles ==
Les quatre opérations classiques <code lang="python>+</code>, <code lang="python>-</code> et <code lang="python>/</code> ne fonctionnent qu'entre tenseurs de mêmes dimensions et sont des opérations élément par élément ''({{lang|en|elementwise operations}})'' :
* <code lang="python">(A + B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] + B[i, j, k]</code> ;
* <code lang="python">(A - B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] - B[i, j, k]</code> ;
* <code lang="python">(A / B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] / B[i, j, k]</code>.
La multiplication élément par élément se fait avec
: <code lang="python">np.multiply(A, B)</code> qui vaut <code lang="python">A[i, j, k] * B[i, j, k]</code>.
De même, les fonctions <code lang="python>np.add()</code>, <code lang="python>np.subtract()</code>, <code lang="python>np.multiply()</code> et <code lang="python>np.divide()</code> effectuent des opérations élément par élément sur des tenseurs de mêmes dimensions :
* <code lang="python">np.add(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] + B[i, j, k]</code> ;
* <code lang="python">np.subtract(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] - B[i, j, k]</code> ;
* <code lang="python">np.multiply(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] * B[i, j, k]</code> ;
* <code lang="python">np.divide(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] / B[i, j, k]</code>.
La multiplication matricielle, au sens de l'algèbre linéaire, se fait avec les fonctions <code lang="python">np.dot()</code> ou <code lang="python">np.matmul()</code>, ou bien avec l'opérateur <code>@</code>.
<syntaxhighlight lang="python">
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(a @ b) # np.matmul(a, b)
# [[19 22]
# [43 50]]
</syntaxhighlight>
Pour un poduit scalaire :
<syntaxhighlight lang="python">
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
# 32
</syntaxhighlight>
Notez que :
* pour le produit par un scalaire, les fonctions <code lang="python">np.multiply()</code> et l'opérateur <code lang="python">*</code> sont plus performants ;
* la fonction <code lang="python">np.dot()</code> est plus performante pour le produit scalaire de deux vecteurs réels ;
* lorsque l'on a des vecteurs complexes, la fonction <code lang="python">np.vdot()</code> fait le produit par le conjugué du premier membre (<code lang="python">np.vdot(a, b) == np.dot(a.conj(), b)</code>) ;
* la fonction <code lang="python">np.matmul()</code> et l'opérateur <code lang="python">@</code> (<code lang="python">A @ B</code>) sont plus performants pour un produit matriciel.
L'opérateur <code>@=</code> fait un produit matriciel en modifiant la variable elle-même (à l'image de <code>*=</code> pour les nombres).
== Calcul vectorisé ==
Les fonctions de NumPy traitent en général les matrices en entier. Ainsi, il n'est pas nécessaire de créer une boucle pour faire défiler les indices un par un. Il en résulte un code clair et compact et surtout un plus grande rapidité d'exécution. Par exemple :
<syntaxhighlight lang="python">
x = np.linspace(0, 2*np.pi, 50) # 50 points entre 0 et 2π
y = np.sin(x)
plt.plot(x, y)
</syntaxhighlight>
La variable <code>x</code> est un vecteur de 50 valeurs et il est traité en une seule passe par la fonction sinus <code>np.sin()</code>.
Outre le tranchage ''({{lang|en|slicing}})'', on peut utiliser deux autres méthodes pour extraire certaines valeurs d'une matrice :
* utiliser un vecteur ou une matrice d'indices, Python extrait alors les valeurs correspondant aux indices ;
* utiliser un vecteur ou une matrice de booléens de même dimension que a matrice ; Python extrait alors les valeurs correspondant aux <code>True</code>, la matrice booléenne est un « masque » pour la matrice d'origine. Par exemple :
<syntaxhighlight lang="python">
a = np.arange(0, 10)
b = np.array([1, 3, 5, 7, 9])
c = np.array([True, True, False, False, True, False, True, False, False, True])
print(a[b], "\n", a[c])
</syntaxhighlight>
Si l'on veut inverser tous les éléments d'une matrice de bolléens, il faut utiliser la fonction <code>np.logical_not()</code>
'''Exercice'''
Écrire un programme Python mettant en œuvre le [[w:crible d'Érathostène|crible d'Érathostène]] pour trouver les nombres premiers inférieurs à une valeur donnée.
{{boîte déroulante début|Solution}}
<syntaxhighlight lang="python">
#!/usr/bin/env python
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
# ***************
# ***************
# ** Fonctions **
# ***************
# ***************
def eratosthene(limite):
# Détermine la liste des nombres premiers entre 1 et N
# par le crible d'Ératosthène
# Entrées : limite : nombre entier, N
# Sorties : liste : vecteur d'entiers,liste des nombres premiers
indices = (np.ones(limite) == 1) # vecteur de booléens tous à True
# à la fin, indice(i-1) est True si i est premier, False sinon
indices[0]=False # 1 n'est pas premier
imax = int(limite)
i = 2 # initialisation
repete = (i <= imax)
while repete:
if indices[i-1]:
jmax = int(limite/i)
j = np.arange(1, jmax)+1
indices[i*j-1]=False # élimination des multiples de i
test = (i*jmax == imax)
i = i + 1
repete = i*i < limite # condition d'arrêt
liste0 = np.arange(limite)
liste = liste0[indices]+1
return liste
# *************************
# *************************
# ** Programme principal **
# *************************
# *************************
print("***** Recherche de nombres premiers par le crible d'Ératosthène *****\n")
nmax = eval(input("Entrez la valeur maximale : "))
resultat = eratosthene(nmax)
print("\n", resultat.shape[0], "nombres premiers entre 1 et", nmax, ":\n")
print(resultat)
plt.plot(resultat, np.zeros_like(resultat), "|")
</syntaxhighlight>
L'extraction par un vecteur d'indice intervient dans l'instruction :
<syntaxhighlight lang="python">
indices[i*j-1]=False
</syntaxhighlight>
qui élimine en une seule passe tous les multiples de ''i''. L'extraction par un vecteur booléen intervient dans l'instruction :
<syntaxhighlight lang="python">
liste = liste0[indices]+1
</syntaxhighlight>
qui permet d'extraire toutes la valeurs conservées en une seule passe.
{{boîte déroulante fin}}
== Attributs ==
La classe <code>ndarray</code>, qui définit les matrices, possède un certain nombre d'attributs :
* <code>.shape</code> : dimensions de la matrice ;
* <code>.ndim</code> : ordre du tenseur ;
* <code>.size</code> : nombre d'éléments ;
* <code>.dtype</code> : type des éléments.
<syntaxhighlight lang="python">
a = np.linspace(1, 9, 9)
print("a", a, "\n",
" ; shape :", a.shape,
" ; dim : ", a.ndim,
" ; size : ", a.size,
" ; dtype : ", a.dtype, "\n")
</syntaxhighlight>
* <code>.real</code>, <code>.imag</code> : parties réelle et imaginaire de la matrice ;
* <code>.flat</code> : liste des éléments de la matrice ; les éléments sont réorganisés en une liste ;
* <code>.T</code> : transposée.
<syntaxhighlight lang="python">a = np.arange(0, 9).reshape(3, 3)
print(a)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
print(a.T)
# [[0 3 6]
# [1 4 7]
# [2 5 8]]
print(a.flat[:])
# array([0, 1, 2, 3, 4, 5, 6, 7, 8])
</syntaxhighlight>
; Ressources
: Section « Attribute », {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html
| titre = numpy.ndarray
| site = Numpy and Scipy Documentation
| consulté le = 2019-03-16
}}
== Fonctions et méthodes de base ==
La classe <code>ndarray</code> possède un certain nombre de méthodes :
* <code>.min()</code> et <code>.max()</code> : valeurs respectivement minimale et maximale ;
* <code>.ptp()</code> : amplitude « max – min » ''({{lang|en|peak to peak}})'' ;
* <code>.argmin()</code> et <code>argmax()</code> : indice où se trouvent les valeurs respectivement minimale et maximale ;
* <code>.sum()</code>, <code>prod()</code> : somme et produit de tous les éléments de la matrice ;
* <code>.cumsum()</code>, <code>cumprod()</code> : somme et produit cumulés.
<syntaxhighlight lang="python">
a = np.linspace(1, 9, 9)
print("min : ", a.min(),
"; max : ", a.max(), "\n",
"sum : ", a.sum(),
"; cumsum : ", a.cumsum(), "\n",
"prod : ", a.prod(),
"; cumprod : ", a.cumprod(), "\n")
</syntaxhighlight>
Méthodes statistiques :
* <code>.mean()</code> : moyenne ;
* <code>.std()</code> : écart type ''({{lang|en|standard deviation}})''.
{{loupe|../Statistiques}}
Extraction de données :
* <code>.diagonal()</code> : vecteur contenant les éléments de la diagonale ;
* <code>.flatten()</code> : matrice « aplatie », c'est-à-dire vecteur contenant les éléments réorganisés en liste ; par rapport à l'attribut <code>.flat</code>, on peut choisir le sens de linéarisation (par lignes, <code>.flatten(C)</code>, ou par colonnes, <code>.flatten(F)</code>) mais cela crée une copie, on ne peut pas par exemple s'en servir pour modifier la matrice ;
* <code>.tofile()</code> : crée un fichier texte contenant les valeurs de la matrice ; par exemple, pour une matrice <code>a</code> et pour séparer les valeurs par un point-virgule :
<syntaxhighlight lang="python">
a.tofile("matriceA.txt", sep=" ; ")
</syntaxhighlight>
* <code>.astype(''type'')</code> : copie la matrice en convertissant le type de données :
<syntaxhighlight lang="python">
a = a.astype(float) # pour avoir une matrice de réels en virgule flottante
a = a.astype(str) # pour avoir une matrice de chaînes de caractères
</syntaxhighlight>
Tri :
* <code>np.sort(M, i)</code> : crée une copie et trie la matrice selon l'axe ''i'' (0 pour le premier indice, 1 pour le deuxième… la valeur par défaut est –1 pour le dernier indice, la valeur ''none'' aplatit la matrice) ; <code>np.sort(M, 0)</code> trie chaque colonne indépendamment par ordre croissant, <code>np.sort(M, 1)</code> trie chaque ligne indépendamment par ordre croissant ;
* <code>M.sort(i)</code> : cette méthode trie la matrice en elle-même ;
* <code>np.argsort(M, i)</code> : crée une matrice contenant le nouvel indice, selon l'axe ''i'', de chaque élément.
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5]])
M.sort(1) # tri des lignes indépendamment -> [[1, 5, 5, 7], [2, 3, 4, 9], [1, 5, 7, 9]]
</syntaxhighlight>
Pour trier les lignes selon la deuxième colonne d'une matrice, tout en conservant les lignes intactes, on peut faire comme suit :
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5]])
ind = np.argsort(M[:, 1]) # indices de tri selon la 2e colonne
N = M[ind, :] # réarrangement des lignes -> [[9, *1*, 7, 5], [1, *5*, 7, 5], [2, *9*, 4, 3]]
</syntaxhighlight>
Pour faire un tri lexicographique, on utilise la fonction <code>np.lexsort()</code> en indiquant les différentes colonnes :
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5], [2, 9, 8, 5]])
ind = np.lexsort((M[:, 3], M[:, 2], M[:, 1], M[:, 0])) # indices de tri selon la 1re, puis la 2e, puis la 3e, puis la 4e colonne
N = M[ind, :] # réarrangement des lignes -> [[1, 5, 7, 5], [2, 9, 4, 3], [2, 9, 8, 5], [9, 1, 7, 5]]
</syntaxhighlight>
Le tri se fait par ordre croissant. Pour trier par ordre décroissant, on inverse l'ordre de la matrice en faisant une extraction avec un pas de moins un, par exemple pour inverser les lignes :
<syntaxhighlight lang="python">
M = M[:, ::-1]
</syntaxhighlight>
Algèbre linéaire :
* <code>a.dot(b)</code> : produit matriciel ''a''⋅''b'' ; on peut aussi écrire <code>a@b</code> ;
* <code>.trace()</code> : trace de la matrice (somme des éléments diagonaux) ;
* <code>.transpose()</code> : transpose la matrice, résultat similaire à l'attribut <code>.T</code> ;
* <code>np.cross()</code> : produit vectoriel dans ℝ³.
{{loupe|../Algèbre linéaire}}
Matrices de booléens :
* <code>.all()</code> : applique un « et » logique à toutes les valeurs de la matrice ;
* <code>.any()</code> : applique un « ou » logique à toutes les valeurs de la matrice.
{{loupe|../Fonctions mathématiques générales#Fonctions booléennes}}
Autre méthodes :
* <code>.conj()</code> : conjugué des valeurs complexes ;
* <code>.nonzero()</code> : n-uplet contenant les indices des valeurs non-nulles ;
* <code>.round(n)</code> : arrondit les valeurs à la ''n''-ième décimale.
; Ressources
: Section « Method », {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html
| titre = numpy.ndarray
| site = Numpy and Scipy Documentation
| consulté le = 2019-03-16
}}
== Propagation ==
Le terme « propagation » ''({{lang|en|broadcasting}})'' désigne la manière dont Python complète les matrice lorsque des dimensions manquent.
Supposons que l'on veuille additionner deux matrices M<sub>1</sub> et M<sub>2</sub> de dimensions ''m''<sub>1</sub> × ''n''<sub>1</sub> et ''m''<sub>2</sub> × ''n''<sub>2</sub> différentes. Alors :
* le résultat a pour dimension max(''m''<sub>1</sub>, ''m''<sub>2</sub>) × max(''n''<sub>1</sub>, ''n''<sub>2</sub>) ;
* si une des dimensions vaut 1, alors les valeurs de l'autre dimension sont dupliquées ;
* sinon, les dimensions manquantes pour chaque matrice sont complétées par des 1.
Par exemple :
: <math>\mathrm{A} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
: <math>5 + \mathrm{A} = \begin{pmatrix} 5 & 5 \\ 5 & 5 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
:: La matrice (5) est de dimension 1 × 1, la valeur « 5 » est donc répétée dans les deux dimensions
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
print(5 + A)
# [[6 7]
# [7 8]]
</syntaxhighlight>
: <math>(5, 4) + \mathrm{A} = \begin{pmatrix} 5 & 4 \\ 5 & 4 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
<syntaxhighlight lang="python">
print(np.array([[5, 4]]) + A)
# [[6 6]
# [6 8]]
</syntaxhighlight>
: <math>\begin{pmatrix} 5 \\ 4 \end{pmatrix} + \mathrm{A} = \begin{pmatrix} 5 & 5 \\ 4 & 4 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
<syntaxhighlight lang="python">
print(np.array([[5], [4]]) + A)
# [[6 7]
# [7 8]]
</syntaxhighlight>
== Fonctions « universelles » ==
Les fonctions universelles ''({{lang|en|ufunc}})'' sont les fonctions s'appliquant aux matrices, des fonctions vectorisées.
; Ressource
: {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs
| titre = Available ufuncs
| site = SciPy documentation
| consulté le = 2019-03-21
}}
== Algèbre linéaire ==
{{loupe|../Algèbre linéaire}}
== Notes et références ==
{{références}}
----
[[../Graphiques|Graphiques]] < [[../|↑]] > [[../Polynômes|Polynômes]]
[[Catégorie:Python pour le calcul scientifique (livre)]]
hot9mb7nmlybpxy1itpp2c1j6uc0mus
769250
769249
2026-06-30T12:23:19Z
Cdang
1202
/* Trouver une valeur */ typo
769250
wikitext
text/x-wiki
Les matrices sont un élément primordial du calcul scientifique sur ordinateur pour deux raisons :
# L'algèbre linéaire est au cœur de nombreux calculs.
# Les matrices sont l'élément de base du calcul vectorisé qui permet un gain de temps appréciable.
Pour pouvoir expliter les matrices, il faut charger le module NumPy ; nous utilisons également Matplotlib pour les graphiques. Ainsi, les programmes contiennent tous au début :
<syntaxhighlight lang="python">
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
</syntaxhighlight>
== Rappels et complément sur le tranchage ==
Soit une liste L composée de ''n'' éléments.
* Les éléments sont numérotés de 0 à ''n'' – 1.
* Le premier élément s'obtient par <code lang="python">L[0]</code>.
* Le i-ème élément s'obtient par <code lang="python">L[''i'' - 1]</code>.
* L'avant-dernier élément s'obtient par <code lang="python">L[-2]</code>.
* Le dernier élément s'obtient par <code lang="python">L[-1]</code>.
* La sous-liste composée des éléments contigus ''i'' à ''j'' s'obtient par <code lang="python">L[''i'' - 1:j]</code>.
Ainsi, <code lang="python">L[0:1]</code> va extraire le premier élément, <code lang="python">L[1:-1]</code> va extraire tous les éléments sauf le premier et le dernier.
{{voir|[[Python_pour_le_calcul_scientifique/Découverte_de_Python_et_de_Jupyter#Itérable|Découverte_de_Python_et_de_Jupyter > Itérable]]}}
NumPy fournit des fonctions permettant de manipuler les matrices :
* <code lang="python">np.append(A, B)</code> : fusionne les vecteurs A et B ;<br /> s'il s'agit de matrices ou de tenseurs, la fonction les « aplatit », les transforme en vecteur ;<br />si l'on veut intégrer B dans A, on utilise <code lang="python">A = np.append(A, B)</code> ;
* <code lang="python">np.append(A, B, axis = ''i'')</code> : fusionne les tenseurs selon l'indice ''i'' (<code>0</code> pour le premier indice, <code>1</code> pour le deuxième…) ;
* <code lang="python">np.insert(A, i, m)</code> : insère le vecteur ''m'' dans le vecteur A (ou la matrice A aplatie) à l'emplacement ''i'' ;
* <code lang="python">np.insert(A, i, M, axis = ''j'')</code> : insère le tenseur M dans le tenseur A à l'emplacement ''i'' de l'indice ''j'' ;
* <code lang="python">np.delete(A, I)</code> : efface les éléments définis par le tranchage I du vecteur A (ou de la matrice A aplatie) ;
* <code lang="python">np.delete(A, I, axis = ''j'')</code> : efface les éléments définis par le tranchage I selon l'indice ''j'' du tenseur A.
<syntaxhighlight lang="Python">
A = np.array([[1]])
B = np.array([[2, 3, 4]])
C = np.append(A, B, axis=1)
print(A, B, C, sep="\n")
# [[1]]
# [[2 3 4]]
# [[1 2 3 4]]
D = np.array([[10, 20, 30, 40]])
E = np.append(C, D, axis=0)
print(E)
# [[ 1 2 3 4]
# [10 20 30 40]]
</syntaxhighlight>
On peut utiliser <code>np.r_[A, B]</code> pour concaténer A et B en ligne ''(row), et <code>np.c_[A, B]</code> pour les concaténer en colonne.
On peut extraire une sous-matrice à partir d'une matrice de booléens :
<syntaxhighlight lang="Python">
A = np.array([[1, 2], [3, 4], [5, 6]])
booleen = np.logical_or(A==1, A==3)
print(booleen)
# [[ True False]
# [ True False]
# [ False False]]
print(A[booleen])
# [1 3]
booleen = np.logical_or(A[:, 0]==1, A[:, 0]==3)
print(booleen)
# [ True True False]
print(A[booleen])
# [[1 2]
# [3 4]]
print(A[booleen][:, 1])
# [2 4]
</syntaxhighlight>
== Différence entre ''array'' et ''matrix'' ==
Il existe deux types d'objet NumPy pour décrire les matrices : les objets ''array'' (tableau, classe <code>ndarray</code>) et les objets ''matrix'' (matrice, classe <code>matrix</code>).
<syntaxhighlight lang="Python">
A = np.array([[1, 2], [3, 4], [5, 6]])
B = np.matrix([[1, 2], [3, 4], [5, 6]])
</syntaxhighlight>
Il y a trois différences :
* les objets ''array'' peuvent être de n'importe quelle dimension : 0 (scalaire), 1 (vecteur), 2 (matrice), 3 (tenseur d'ordre 3)… alors qu'un objet ''matrix'' est nécessairement de dimension 2 ;
* les opération sur les objets ''matrix'' sont par défaut des opérations matricielles ; ainsi, la multiplication <code>A * B</code> va être une multiplication terme à terme si A et B sont des ''array'', et une multiplication matricielle si A et B sont des ''matrix'' ; pour avoir la multiplication matricielle entre ''array'', il faut utiliser <code>a@b</code> ou <code>np.dot(a,b)</code> ;
* si une matrice A est inversible, alors avec un objet ''matrix'', on peut utiliser la méthode <code>A.I</code> ; si A est un objet ''array'', il faut utiliser <code>np.linalg.inv(A)</code>.
La classe <code>matrix</code> a été dépréciée, il est recommandé de n'utiliser que la classe <code>ndarray</code>. Nous n'utiliserons donc pas la classe <code>matrix</code>.
== Définir un tenseur ==
Un tenseur est similaire à une liste mais il est défini par la fonction <code>np.array()</code>. La définition et l'extraction de composante utilise la méthode du découpage en tranches ''({{lang|en|slicing}})''.
'''Exemples'''
<syntaxhighlight lang="python">
a = np.array([1, 3, 5, 7]) # vecteur
bc = np.array([[1], [2], [3], [4]]) # matrice 4 × 1 (matrice colonne)
bl = np.array([[1, 2, 3, 4]]) # matrice 1 × 4 (matrice ligne)
c = np.array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]]) # matrice 3 × 3
d = np.array([[[1, 2, 3],
[2, 3, 4]],
[[10, 9, 8],
[ 7, 6, 5]]]) # tenseur d'ordre 3, de dimension 3 × 2 × 2
</syntaxhighlight>
Notez que dans NumPy, un vecteur n'est pas la même chose qu'une matrice ligne ou colonne. Un vecteur de dimension ''n'' est un tenseur d'ordre 1 et de dimension ''n'' ; une matrice ligne ou colonne est un tenseur d'ordre 2 et de dimension 1 × ''n'' ou ''n'' × 1.
<syntaxhighlight lang="python">
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3]])
c = np.array([[1], [2], [3]])
print(a.size, b.size, c.size) # 3 3 3
print(a.ndim, b.ndim, c.ndim) # 1 2 2
print(a.shape, b.shape, c.shape) # (3,) (1, 3) (3, 1)
</syntaxhighlight>
La fonction <code>np.arange()</code> est similaire à la fonction <code>range()</code> pour les liste ; elle génère un vecteur de réels. La fonction <code>np.linspace()</code> permet également de créer un vecteur de même type, mais on indique le dernier nombre alors que la règle du découpage en tranches fait que le nombre maximal indiqué à <code>np.arange()</code> est le premier nombre qui ne ''figure pas'' dans le vecteur.). La fonction <code>np.zeros()</code> génère une matrice nulle, <code>np.zeros_like()</code> une matrice nulle ayant les dimensions d'une matrice fournie comme modèle. De même, <code>np.ones()</code> et <code>np.ones_like()</code> crée des matrices, dont toutes les composantes sont à 1. La fonction <code>np.eye()</code> crée une matrice unité.
'''Exemples'''
<syntaxhighlight lang="python">
e = np.arange(0, 2, 0.1) # vecteur [0, 0.1, 0.2…, 1.8, 1.9]
f = np.linspace(0, 2, 5) # 5 nombres entre 0 et 2 soit le vecteur [0, 0.5, 1, 1.5, 2]
g = np.zeros(3) # vecteur nul de dimension 3
h = np.zeros((3, 3)) # matrice nulle 3 × 3
k = np.ones_like(a) # matrice de 1 de même dimension que a
u = np.eye(3) # matrice unité 3 × 3
</syntaxhighlight>
Le paramètre <code>dtype</code> permet de forcer le type. Par exemple
<syntaxhighlight lang="python">
a = np.array([1, 2, 3], dtype="complex")
k = np.ones_like(a, dtype="int")
</syntaxhighlight>
La commande <code>np.linspace()</code> peut créer des matrices colonne : on donne la première et la dernière ligne ; par exemple : :
<syntaxhighlight lang="python">
np.linspace([1, -1], [10, -10], 4)
# [[ 1. -1.]
# [ 4. -4.]
# [ 7. -7.]
# [ 10. -10.]]
</syntaxhighlight>
Les commandes <code>np.geomspace()</code> et <code>np.geomspace()</code> fonctionnent comme <code>np.linspace()</code>, mais avec une progression logarithmique. La commande <code>np.geomspace(a, b, n)</code> crée un vecteur (ou une matrice colonne) allant de ''a'' à ''b'' alors que <code>np.logspace(a, b, n)</code> crée un vecteur (ou une matrice colonne) allant de 10<sup>''a''</sup> à 10<sup>''b''</sup>.
La méthode <code>.reshape()</code> remet en forme une matrice. Par exemple, pour transformer un vecteur de dimension 9 en une matrice 3 × 3 :
<syntaxhighlight lang="python">
a = np.arange(1, 10)
b = a.reshape(3, 3)
# ou bien directement
c = np.arange(1, 10).reshape(3, 3)
</syntaxhighlight>
Avec la méthode <code>.reshape()</code>, on peut utiliser la valeur –1 pour une des dimensions ; sa valeur est alors automatiquement calculée en fonction du nombre d'éléments et de l'autre dimension. On peut aussi utiliser une dimension vide ; cela crée alors un vecteur. Par exemple, pour une matrice M quelconque :
<syntaxhighlight lang="python">
M.reshape(-1, 1) # crée une matrice colonne
M.reshape(1, -1) # crée une matrice ligne
M.reshape(-1,) # crée un vecteur
</syntaxhighlight>
La méthode <code>.fill()</code> remplit la matrice avec un scalaire :
<syntaxhighlight lang="python">
b.fill(5) # remplace les valeurs de b par la valeur 5
</syntaxhighlight>
== Extraction matricielle ==
Si l'on veut extraire les colonnes 1 et 3 pour toutes les lignes d'une matrice M, on utilise :
<syntaxhighlight lang="python">
M[:, [0, 2]]
</syntaxhighlight>
== Trouver une valeur ==
Pour trouver une valeur, on utilise la fonction <code>where()</code> :
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
print(A)
# [[1 2]
# [3 4]]
B = np.where(A == 3)
print(B)
# (array([1]), array([0])
print(B[0][0], B[1][0])
# 1 0
C = np.where(A == 5)
print(C)
# (array([], dtype=int64), array([], dtype=int64))
# C est un n-uplet (tuple) contenant deux vecteurs d'entiers vides.
print(len(C[0])) # taille du premier vecteur du n-uplet C
# 0
</syntaxhighlight>
Notez que <code>where()</code> peut servir à construire une matrice à partir de deux autres matrices selon une condition. Par exemple, pour comparer les éléments deux à deux et sélectionner le plus grand :
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
B = np.array([[0, 1], [4, 5]])
C = np.where(A > B, A, B)
print(C)
# [[1 2]
# [4 5]
</syntaxhighlight>
La syntaxyte générale est <code>C = np.where(condition, A, B)</code> où <code>condition</code> est une matrice de booléens ; pour un indice (''i'', ''j''), si <code>condition[i, j]</code> est vrai, alors <code>C[i, j]</code> vaut <code>A[i, j]</code>, sinon elle vaut <code>B[i, j]</code>.
== Assemblage de matrices ==
Si l'on veut regrouper deux matrices, on utilise la commande <code>np.concatenate()</code>. On utilise le paramètre ''axis'' pour indiquer si l'on empile les matrices l'une au-dessus de l'autre (<code>axis=0</code>) ou bien l'une derrière l'autre (<code>axis=1</code>). Par exemple :
<syntaxhighlight lang="python">
A = np.array([[1 ,2], [3, 4]])
B = np.array([[5 ,6], [7, 8]])
C = np.concatenate((A, B), axis = 0)
# [[1 2]
# [3 4]
# [5 6]
# [7 8]]
D = np.concatenate((A, B), axis = 1)
# [[1 2 5 6]
# [3 4 7 8]]
</syntaxhighlight>
Si l'on veut transformer deux vecteurs en une matrice de deux colonnes, chaque vecteur occupant une colonne :
<syntaxhighlight lang="python">
A = np.array([1 ,2])
B = np.array([3 ,4])
C = np.concatenate((A.reshape(-1, 1), B.reshape(-1, 1)), axis = 1)
# [[1 3]
# [2 4]]
</syntaxhighlight>
== Opérations matricielles ==
Les quatre opérations classiques <code lang="python>+</code>, <code lang="python>-</code> et <code lang="python>/</code> ne fonctionnent qu'entre tenseurs de mêmes dimensions et sont des opérations élément par élément ''({{lang|en|elementwise operations}})'' :
* <code lang="python">(A + B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] + B[i, j, k]</code> ;
* <code lang="python">(A - B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] - B[i, j, k]</code> ;
* <code lang="python">(A / B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] / B[i, j, k]</code>.
La multiplication élément par élément se fait avec
: <code lang="python">np.multiply(A, B)</code> qui vaut <code lang="python">A[i, j, k] * B[i, j, k]</code>.
De même, les fonctions <code lang="python>np.add()</code>, <code lang="python>np.subtract()</code>, <code lang="python>np.multiply()</code> et <code lang="python>np.divide()</code> effectuent des opérations élément par élément sur des tenseurs de mêmes dimensions :
* <code lang="python">np.add(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] + B[i, j, k]</code> ;
* <code lang="python">np.subtract(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] - B[i, j, k]</code> ;
* <code lang="python">np.multiply(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] * B[i, j, k]</code> ;
* <code lang="python">np.divide(A, B)[i, j, k]</code> vaut <code lang="python">A[i, j, k] / B[i, j, k]</code>.
La multiplication matricielle, au sens de l'algèbre linéaire, se fait avec les fonctions <code lang="python">np.dot()</code> ou <code lang="python">np.matmul()</code>, ou bien avec l'opérateur <code>@</code>.
<syntaxhighlight lang="python">
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(a @ b) # np.matmul(a, b)
# [[19 22]
# [43 50]]
</syntaxhighlight>
Pour un poduit scalaire :
<syntaxhighlight lang="python">
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
# 32
</syntaxhighlight>
Notez que :
* pour le produit par un scalaire, les fonctions <code lang="python">np.multiply()</code> et l'opérateur <code lang="python">*</code> sont plus performants ;
* la fonction <code lang="python">np.dot()</code> est plus performante pour le produit scalaire de deux vecteurs réels ;
* lorsque l'on a des vecteurs complexes, la fonction <code lang="python">np.vdot()</code> fait le produit par le conjugué du premier membre (<code lang="python">np.vdot(a, b) == np.dot(a.conj(), b)</code>) ;
* la fonction <code lang="python">np.matmul()</code> et l'opérateur <code lang="python">@</code> (<code lang="python">A @ B</code>) sont plus performants pour un produit matriciel.
L'opérateur <code>@=</code> fait un produit matriciel en modifiant la variable elle-même (à l'image de <code>*=</code> pour les nombres).
== Calcul vectorisé ==
Les fonctions de NumPy traitent en général les matrices en entier. Ainsi, il n'est pas nécessaire de créer une boucle pour faire défiler les indices un par un. Il en résulte un code clair et compact et surtout un plus grande rapidité d'exécution. Par exemple :
<syntaxhighlight lang="python">
x = np.linspace(0, 2*np.pi, 50) # 50 points entre 0 et 2π
y = np.sin(x)
plt.plot(x, y)
</syntaxhighlight>
La variable <code>x</code> est un vecteur de 50 valeurs et il est traité en une seule passe par la fonction sinus <code>np.sin()</code>.
Outre le tranchage ''({{lang|en|slicing}})'', on peut utiliser deux autres méthodes pour extraire certaines valeurs d'une matrice :
* utiliser un vecteur ou une matrice d'indices, Python extrait alors les valeurs correspondant aux indices ;
* utiliser un vecteur ou une matrice de booléens de même dimension que a matrice ; Python extrait alors les valeurs correspondant aux <code>True</code>, la matrice booléenne est un « masque » pour la matrice d'origine. Par exemple :
<syntaxhighlight lang="python">
a = np.arange(0, 10)
b = np.array([1, 3, 5, 7, 9])
c = np.array([True, True, False, False, True, False, True, False, False, True])
print(a[b], "\n", a[c])
</syntaxhighlight>
Si l'on veut inverser tous les éléments d'une matrice de bolléens, il faut utiliser la fonction <code>np.logical_not()</code>
'''Exercice'''
Écrire un programme Python mettant en œuvre le [[w:crible d'Érathostène|crible d'Érathostène]] pour trouver les nombres premiers inférieurs à une valeur donnée.
{{boîte déroulante début|Solution}}
<syntaxhighlight lang="python">
#!/usr/bin/env python
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
# ***************
# ***************
# ** Fonctions **
# ***************
# ***************
def eratosthene(limite):
# Détermine la liste des nombres premiers entre 1 et N
# par le crible d'Ératosthène
# Entrées : limite : nombre entier, N
# Sorties : liste : vecteur d'entiers,liste des nombres premiers
indices = (np.ones(limite) == 1) # vecteur de booléens tous à True
# à la fin, indice(i-1) est True si i est premier, False sinon
indices[0]=False # 1 n'est pas premier
imax = int(limite)
i = 2 # initialisation
repete = (i <= imax)
while repete:
if indices[i-1]:
jmax = int(limite/i)
j = np.arange(1, jmax)+1
indices[i*j-1]=False # élimination des multiples de i
test = (i*jmax == imax)
i = i + 1
repete = i*i < limite # condition d'arrêt
liste0 = np.arange(limite)
liste = liste0[indices]+1
return liste
# *************************
# *************************
# ** Programme principal **
# *************************
# *************************
print("***** Recherche de nombres premiers par le crible d'Ératosthène *****\n")
nmax = eval(input("Entrez la valeur maximale : "))
resultat = eratosthene(nmax)
print("\n", resultat.shape[0], "nombres premiers entre 1 et", nmax, ":\n")
print(resultat)
plt.plot(resultat, np.zeros_like(resultat), "|")
</syntaxhighlight>
L'extraction par un vecteur d'indice intervient dans l'instruction :
<syntaxhighlight lang="python">
indices[i*j-1]=False
</syntaxhighlight>
qui élimine en une seule passe tous les multiples de ''i''. L'extraction par un vecteur booléen intervient dans l'instruction :
<syntaxhighlight lang="python">
liste = liste0[indices]+1
</syntaxhighlight>
qui permet d'extraire toutes la valeurs conservées en une seule passe.
{{boîte déroulante fin}}
== Attributs ==
La classe <code>ndarray</code>, qui définit les matrices, possède un certain nombre d'attributs :
* <code>.shape</code> : dimensions de la matrice ;
* <code>.ndim</code> : ordre du tenseur ;
* <code>.size</code> : nombre d'éléments ;
* <code>.dtype</code> : type des éléments.
<syntaxhighlight lang="python">
a = np.linspace(1, 9, 9)
print("a", a, "\n",
" ; shape :", a.shape,
" ; dim : ", a.ndim,
" ; size : ", a.size,
" ; dtype : ", a.dtype, "\n")
</syntaxhighlight>
* <code>.real</code>, <code>.imag</code> : parties réelle et imaginaire de la matrice ;
* <code>.flat</code> : liste des éléments de la matrice ; les éléments sont réorganisés en une liste ;
* <code>.T</code> : transposée.
<syntaxhighlight lang="python">a = np.arange(0, 9).reshape(3, 3)
print(a)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
print(a.T)
# [[0 3 6]
# [1 4 7]
# [2 5 8]]
print(a.flat[:])
# array([0, 1, 2, 3, 4, 5, 6, 7, 8])
</syntaxhighlight>
; Ressources
: Section « Attribute », {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html
| titre = numpy.ndarray
| site = Numpy and Scipy Documentation
| consulté le = 2019-03-16
}}
== Fonctions et méthodes de base ==
La classe <code>ndarray</code> possède un certain nombre de méthodes :
* <code>.min()</code> et <code>.max()</code> : valeurs respectivement minimale et maximale ;
* <code>.ptp()</code> : amplitude « max – min » ''({{lang|en|peak to peak}})'' ;
* <code>.argmin()</code> et <code>argmax()</code> : indice où se trouvent les valeurs respectivement minimale et maximale ;
* <code>.sum()</code>, <code>prod()</code> : somme et produit de tous les éléments de la matrice ;
* <code>.cumsum()</code>, <code>cumprod()</code> : somme et produit cumulés.
<syntaxhighlight lang="python">
a = np.linspace(1, 9, 9)
print("min : ", a.min(),
"; max : ", a.max(), "\n",
"sum : ", a.sum(),
"; cumsum : ", a.cumsum(), "\n",
"prod : ", a.prod(),
"; cumprod : ", a.cumprod(), "\n")
</syntaxhighlight>
Méthodes statistiques :
* <code>.mean()</code> : moyenne ;
* <code>.std()</code> : écart type ''({{lang|en|standard deviation}})''.
{{loupe|../Statistiques}}
Extraction de données :
* <code>.diagonal()</code> : vecteur contenant les éléments de la diagonale ;
* <code>.flatten()</code> : matrice « aplatie », c'est-à-dire vecteur contenant les éléments réorganisés en liste ; par rapport à l'attribut <code>.flat</code>, on peut choisir le sens de linéarisation (par lignes, <code>.flatten(C)</code>, ou par colonnes, <code>.flatten(F)</code>) mais cela crée une copie, on ne peut pas par exemple s'en servir pour modifier la matrice ;
* <code>.tofile()</code> : crée un fichier texte contenant les valeurs de la matrice ; par exemple, pour une matrice <code>a</code> et pour séparer les valeurs par un point-virgule :
<syntaxhighlight lang="python">
a.tofile("matriceA.txt", sep=" ; ")
</syntaxhighlight>
* <code>.astype(''type'')</code> : copie la matrice en convertissant le type de données :
<syntaxhighlight lang="python">
a = a.astype(float) # pour avoir une matrice de réels en virgule flottante
a = a.astype(str) # pour avoir une matrice de chaînes de caractères
</syntaxhighlight>
Tri :
* <code>np.sort(M, i)</code> : crée une copie et trie la matrice selon l'axe ''i'' (0 pour le premier indice, 1 pour le deuxième… la valeur par défaut est –1 pour le dernier indice, la valeur ''none'' aplatit la matrice) ; <code>np.sort(M, 0)</code> trie chaque colonne indépendamment par ordre croissant, <code>np.sort(M, 1)</code> trie chaque ligne indépendamment par ordre croissant ;
* <code>M.sort(i)</code> : cette méthode trie la matrice en elle-même ;
* <code>np.argsort(M, i)</code> : crée une matrice contenant le nouvel indice, selon l'axe ''i'', de chaque élément.
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5]])
M.sort(1) # tri des lignes indépendamment -> [[1, 5, 5, 7], [2, 3, 4, 9], [1, 5, 7, 9]]
</syntaxhighlight>
Pour trier les lignes selon la deuxième colonne d'une matrice, tout en conservant les lignes intactes, on peut faire comme suit :
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5]])
ind = np.argsort(M[:, 1]) # indices de tri selon la 2e colonne
N = M[ind, :] # réarrangement des lignes -> [[9, *1*, 7, 5], [1, *5*, 7, 5], [2, *9*, 4, 3]]
</syntaxhighlight>
Pour faire un tri lexicographique, on utilise la fonction <code>np.lexsort()</code> en indiquant les différentes colonnes :
<syntaxhighlight lang="python">
M = np.array([[1, 5, 7, 5], [2, 9, 4, 3], [9, 1, 7, 5], [2, 9, 8, 5]])
ind = np.lexsort((M[:, 3], M[:, 2], M[:, 1], M[:, 0])) # indices de tri selon la 1re, puis la 2e, puis la 3e, puis la 4e colonne
N = M[ind, :] # réarrangement des lignes -> [[1, 5, 7, 5], [2, 9, 4, 3], [2, 9, 8, 5], [9, 1, 7, 5]]
</syntaxhighlight>
Le tri se fait par ordre croissant. Pour trier par ordre décroissant, on inverse l'ordre de la matrice en faisant une extraction avec un pas de moins un, par exemple pour inverser les lignes :
<syntaxhighlight lang="python">
M = M[:, ::-1]
</syntaxhighlight>
Algèbre linéaire :
* <code>a.dot(b)</code> : produit matriciel ''a''⋅''b'' ; on peut aussi écrire <code>a@b</code> ;
* <code>.trace()</code> : trace de la matrice (somme des éléments diagonaux) ;
* <code>.transpose()</code> : transpose la matrice, résultat similaire à l'attribut <code>.T</code> ;
* <code>np.cross()</code> : produit vectoriel dans ℝ³.
{{loupe|../Algèbre linéaire}}
Matrices de booléens :
* <code>.all()</code> : applique un « et » logique à toutes les valeurs de la matrice ;
* <code>.any()</code> : applique un « ou » logique à toutes les valeurs de la matrice.
{{loupe|../Fonctions mathématiques générales#Fonctions booléennes}}
Autre méthodes :
* <code>.conj()</code> : conjugué des valeurs complexes ;
* <code>.nonzero()</code> : n-uplet contenant les indices des valeurs non-nulles ;
* <code>.round(n)</code> : arrondit les valeurs à la ''n''-ième décimale.
; Ressources
: Section « Method », {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html
| titre = numpy.ndarray
| site = Numpy and Scipy Documentation
| consulté le = 2019-03-16
}}
== Propagation ==
Le terme « propagation » ''({{lang|en|broadcasting}})'' désigne la manière dont Python complète les matrice lorsque des dimensions manquent.
Supposons que l'on veuille additionner deux matrices M<sub>1</sub> et M<sub>2</sub> de dimensions ''m''<sub>1</sub> × ''n''<sub>1</sub> et ''m''<sub>2</sub> × ''n''<sub>2</sub> différentes. Alors :
* le résultat a pour dimension max(''m''<sub>1</sub>, ''m''<sub>2</sub>) × max(''n''<sub>1</sub>, ''n''<sub>2</sub>) ;
* si une des dimensions vaut 1, alors les valeurs de l'autre dimension sont dupliquées ;
* sinon, les dimensions manquantes pour chaque matrice sont complétées par des 1.
Par exemple :
: <math>\mathrm{A} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
: <math>5 + \mathrm{A} = \begin{pmatrix} 5 & 5 \\ 5 & 5 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
:: La matrice (5) est de dimension 1 × 1, la valeur « 5 » est donc répétée dans les deux dimensions
<syntaxhighlight lang="python">
A = np.array([[1, 2], [3, 4]])
print(5 + A)
# [[6 7]
# [7 8]]
</syntaxhighlight>
: <math>(5, 4) + \mathrm{A} = \begin{pmatrix} 5 & 4 \\ 5 & 4 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
<syntaxhighlight lang="python">
print(np.array([[5, 4]]) + A)
# [[6 6]
# [6 8]]
</syntaxhighlight>
: <math>\begin{pmatrix} 5 \\ 4 \end{pmatrix} + \mathrm{A} = \begin{pmatrix} 5 & 5 \\ 4 & 4 \end{pmatrix} + \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} </math>
<syntaxhighlight lang="python">
print(np.array([[5], [4]]) + A)
# [[6 7]
# [7 8]]
</syntaxhighlight>
== Fonctions « universelles » ==
Les fonctions universelles ''({{lang|en|ufunc}})'' sont les fonctions s'appliquant aux matrices, des fonctions vectorisées.
; Ressource
: {{lien web
| url = https://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs
| titre = Available ufuncs
| site = SciPy documentation
| consulté le = 2019-03-21
}}
== Algèbre linéaire ==
{{loupe|../Algèbre linéaire}}
== Notes et références ==
{{références}}
----
[[../Graphiques|Graphiques]] < [[../|↑]] > [[../Polynômes|Polynômes]]
[[Catégorie:Python pour le calcul scientifique (livre)]]
jwasoh9dep1jrfh0k9c0ez1zxyog0vq
Découvrir Scilab/Régression
0
73083
769251
700978
2026-06-30T21:09:17Z
Cdang
1202
/* Régression polynomiale */ moins demi-cadratin
769251
wikitext
text/x-wiki
<noinclude>{{NavTitre|book={{BASEPAGENAME}}|prev=Interpolation, extrapolation et lissage|next=Calcul différentiel et intégral}}</noinclude>
{{Scilab}}
<br />
<span style="font-size:25px;">6. Régression</span>
----
'''Présentation du problème'''
Le problème a des similarités avec celui de l'interpolation : on a des points expérimentaux (''x<sub>i</sub>'', ''y<sub>i</sub>''), et l'on détermine une fonction décrivant ces points. Les différences majeures sont :
* la fonction est déterminée sur l'ensemble de définition complet, à partir de tous les points, et non pas par morceaux entre deux points ;
* la fonctions ne passe en général pas ''par'' les points expérimentaux mais ''près'' de ces points.
Par ailleurs, la forme de la fonction est souvent déterminée par le type de problème auquel on s'attaque, elle a un « sens physique », là où l'interpolation se contente de prendre des fonctions simples.
Considérons un nuage de ''n'' points « expérimentaux » (X, Y) : X et Y sont des vecteurs
* X = [X<sub>1</sub> ; X<sub>2</sub> ; … ; X<sub>''n''</sub>] ;
* Y = [Y<sub>1</sub> ; Y<sub>2</sub> ; … ; Y<sub>''n''</sub>].
Considérons une fonction « modèle » ''y'' = ƒ(A, ''x'') où A est un vecteur ; les valeurs de A sont des paramètres de la fonction ƒ, par exemple :
* ƒ(A, ''x'') = A(1)·exp((''x'' - A(2))<sup>2</sup>/A(3)) : une fonction gaussienne ;
* ƒ(A, ''x'') = A(1)·''x''<sup>3</sup> + A(2)·''x''<sup>2</sup> + A(3)·''x'' + A(4) : un polynôme de degré 3.
La régression consiste à trouver le vecteur A tel que la fonction ƒ « colle le mieux » au nuage de points. On utilise pour cela la méthode des moindres carrés ''(least square)'' :
* on définit la fonction « résidus » ''r''(A, ''x'', ''y'') entre le modèle et les points expérimentaux :
*: ''r''(A, ''x'', ''y'') = ''y'' - ƒ(A, ''x'') ;
* on définit la somme S des carrés des résidus comme étant :
*: S = ∑<sub>''i''</sub> ''r''<sup>2</sup>(A, X<sub>''i''</sub>, Y<sub>''i''</sub>) ;
la régression par la méthode des moindres carrés consiste donc à trouver le vecteur A donnant la valeur minimale de S.
== Régression linéaire ==
=== Régression linéaire simple ===
Dans le cas de la régression linéaire, la fonction modèle ƒ est une fonction affine :
: ƒ(A, ''x'') = A(1)·''x'' + A(2).
Comme il n'y a que deux paramètres dans le modèle, on note ceux-ci ''a'' et ''b'' :
: ƒ(''a'', ''b'', ''x'') = ''a''·''x'' + ''b''.
D'une certaine manière, la régression consiste à résoudre un système d'équations surdéterminé (chaque point expérimental étant une équation, il y a plus d'équations que d'inconnues) :
: <math>\begin{cases}
a x_1 + b = y_1 \\
a x_2 + b = y_2 \\
\ldots \\
a x_n + b = y_n \\
\end{cases}</math>
ce qui peut s'écrire sous forme matricielle
: A×X = Y
avec
: A = (''a'' ''b'')
: <math>\mathrm{X} = \begin{pmatrix}
x_1 & x_2 & \ldots & x_n \\
1 & 1 & \ldots & 1 \\
\end{pmatrix}</math>
: Y = (''y''<sub>1</sub> ''y''<sub>2</sub> … ''y<sub>n </sub>'')
Si l'on demande à Scilab de résoudre le système avec la division matricielle alors que la matrice X n'est pas carrée, il effectue automatiquement une régression linéaire des moindres carrés :
<syntaxhighlight lang="scilab">
\\ génération des données de test
x = 1:10
y = x + 0.3*rand(x);
\\ régression
X = [x ; ones(x)];
A = y/X
</syntaxhighlight>
Si l'on veut forcer l'ordonnée à l'origine à 0, il suffit de ne pas mettre la ligne de 1 :
<syntaxhighlight lang="scilab">
A = y/x
</syntaxhighlight>
On peut aussi travailler avec des vecteurs colonne, et utiliser l'autre diviseur matriciel <code>A = x\y</code>.
Mais la méthode de la division matricielle ne donne pas d'autre information que les coefficients, et en particulier ne donne pas le résidu.
Pour cela, on peut utiliser la fonction <code>reglin()</code>, avec la syntaxe :
<syntaxhighlight lang = "scilab">
// définition du nuage de points
X = […];
Y = […];
// régression
[a, b, sigma] = reglin(X, Y);
</syntaxhighlight>
{{note
| Les matrices X et Y doivent être des vecteurs ''ligne''.
}}
On peut aussi utiliser la commande <code>regress()</code>. Elle ne permet pas d'obtenir l'écart type, et ne fonctionne qu'avec deux variables, mais par contre, les vecteurs peuvent être indifféremment ligne ou colonne ; ils peuvent même être de types différents (un vecteur ligne et l'autre colonne).
<syntaxhighlight lang = "scilab">
coefs = regress(X, Y)
</syntaxhighlight>
'''Exemple'''
Dans l'exemple suivant, on génère des points dispersés aléatoirement autour d'une droite <code>y = pente*x + ordonnee</code>, puis on fait la régression linéaire de ce nuage de points.
Pour clarifier le code source, le programme est scindé en trois fichiers situés dans le même répertoire (dossier) appelé ici <code>monrepertoire/</code> :
* le fichier <code>fonction.sce</code> qui contient la fonction affine ;
* le fichier <code>generation.sce</code> qui crée un nuage de points et le met dans le fichier <code>donnees.txt</code> ;
* le fichier <code>regression.sce</code> qui lit le fichier <code>donnees.txt</code> et effectue la régression.
: Fichier <code>fonction.sce</code>
<syntaxhighlight lang="scilab">
chdir("monrepertoire/");
// **********
// Constantes
// **********
// **********
// Fonctions
// **********
deff("[y] = affine(a, b, x)", "y = a*x + b")
</syntaxhighlight>
: Fichier <code>generation.sce</code>
<syntaxhighlight lang="scilab">
chdir("monrepertoire/");
// **********
// Constantes
// **********
// paramètres de la loi affine
pente = 1;
ordonnee = 10;
// paramètres de la loi normale
var = 1; // variance
// nombre de points
nbpts = 20;
// **********
// Initialisation
// **********
X = zeros(nbpts)';
Y = zeros(nbpts)';
// **********
// Fonctions
// **********
exec("fonction.sce", -1) // charge le fichier (-1 : sans commentaire)
// **********
// Programme principal
// **********
// nuage de points
for i = 1:nbpts
X(1,i) = i + var*rand(1, "normal");
Y(1,i) = affine(pente, ordonnee, i) + var*rand(1, "normal");
end
// enregistrement
write("donnees.txt", [X,Y]);
</syntaxhighlight>
: Fichier <code>regression.sce</code>
<syntaxhighlight lang="scilab">
clf;
chdir("monrepertoire/");
// **********
// Programme principal
// **********
// lecture des données
donnees = read("donnees.txt", -1, 2)
Xexp = donnees(:,1);
Yexp = donnees(:,2);
// regression
[aopt, bopt, sigma] = reglin(Xexp, Yexp)
// loi modèle
Yopt = affine(aopt, bopt, X);
// affichage
plot(Xexp, Yexp, "+b")
plot(Xexp, Yopt, "-r")
xstring(0, ordonnee, "a = "+string(aopt)+" pour "+string(pente)...
+" ; b = "+string(bopt)+" pour "+string(ordonnee)...
+" ; sigma = "+string(sigma))
</syntaxhighlight>
Comme la forme de la fonction ƒ est connue, il est inutile de la définir. La fonction <code>reglin()</code> retourne un vecteur de trois composantes : les paramètres ''a'' et ''b'' du modèle, et l'écart type σ du résidu (qui est la racine carrée de la somme des carrés des résidus, σ = √S).
=== Régression multilinéaire ===
Notons que ''a'', ''b'', ''x'' et ''y'' peuvent être des vecteurs. Si par exemple on a un modèle linéaire à plusieurs variables :
: ƒ(''a''<sub>1</sub>, ''a''<sub>2</sub>, …, ''a''<sub>''m''</sub>, ''b'', ''x''<sub>1</sub>, ''x''<sub>2</sub>, …''x''<sub>''n''</sub>) = ''a''<sub>1</sub>·''x''<sub>1</sub> + ''a''<sub>2</sub>·''x''<sub>2</sub> + … + ''a''<sub>''n''</sub>·''x''<sub>''n''</sub> + ''b''
alors il suffit de définir X comme étant une matrice ''m''×''n''
X = [X<sub>11</sub>, X<sub>12</sub>, … X<sub>1''n''</sub> ;
X<sub>21</sub>, X<sub>22</sub>, … X<sub>2''n''</sub> ;
…
X<sub>''m''1</sub>, X<sub>''m''2</sub>, … X<sub>''mn''</sub>]
où X<sub>''ij''</sub> est la valeur de ''x<sub>j</sub>'' pour le point de mesure ''i'' ; et de définir Y comme étant un vecteur ligne de ''n'' valeurs
Y = [Y<sub>1</sub>, Y<sub>2</sub>, … , Y<sub>''n''</sub>]
et le paramètre ''a'' retourné par la division matricielle ou par la fonction <code>reglin()</code> est le vecteur [''a''<sub>1</sub>, ''a''<sub>2</sub>, … , ''a''<sub>''n''</sub>].
== Régression polynomiale ==
La régression polynomiale est un cas particulier de régression multilinéaire.
{{loupe|wikipedia:fr:Régression polynomiale}}
Voici par exemple un programme générant ''n'' points pour ''x'' allant de 0 à 5 (valeurs exactes), et ''y'' suivant le polynôme ''x''<sup>3</sup> – 2·''x''<sup>2</sup> + 3·''x'' – 4, bruité :
<syntaxhighlight lang="scilab">
// n points aléatoires approchant un polynôme de degré 3
// chdir("mon_chemin_d_acces"); // répertoire où enregistrer le fichier
n = 10;
x = linspace(0, 5, n);
P = %s^3 - 2*%s^2 - 3*%s + 4;
y = horner(P, x); // valeurs exactes du polynôme
clf;
plot(x, y); // tracé du polynôme
y = y + 3*rand(y, "normal"); // valeurs bruitées
plot(x, y, "+"); // tracé des points bruités
write("polynome_bruite.txt", [x' , y']);
</syntaxhighlight>
Et voici un programme permettant d'effectuer la régression sur ces données :
<syntaxhighlight lang="scilab">
// Régression polynomiale de degré 3
// chdir("mon_chemin_d_acces"); // répertoire où chercher le fichier
M = read("polynome_bruite.txt", -1, 2); // lecture des données
x = M(:, 1);
y = M(:, 2);
X = [x.^3, x.^2, x, ones(x)];
A = X\y; // régression linéaire par les moindres carrés
P = [%s^3, %s^2, %s, 1]*A; // définition du polynôme
yth = horner(P, x); // valeurs correspondant au polynôme
// tracé du résultat
clf;
plot(x, yth)
plot(x, y, "+")
</syntaxhighlight>
== Régression non-linéaire ==
Dans le cas de la régression non-linéaire, ƒ est une fonction quelconque. Pour effectuer la régression, on utilise la fonction <code>leastsq()</code> avec la syntaxe suivante :
<syntaxhighlight lang="scilab">
// fonction modèle
function y = f(A, x)
...
endfunction
// fonction résidus
function e = r(A, x, y)
e = f(A, x) - y
endfunction
// initialisation des paramètres du modèle
Ainit = […];
// définition du nuage de points
X = […];
Y = […];
[S, Aopt] = leastsq(list(r, X, Y), Ainit)
</syntaxhighlight>
Avec cette syntaxe, la fonction <code>leastsq()</code> retourne donc un vecteur :
* le premier élément, <code>S</code>, est la valeur de la somme des carrés des écarts ;
* le second élément, <code>Aopt</code>, est le vecteur contenant la valeur « optimisée » des paramètres du modèle.
{{note
| Les matrices X et Y doivent être ici des vecteurs ''colonne''. Par ailleurs, la fonction de calcul du résidu doit s'appliquer aux ''vecteurs'' X et Y, pour renvoyer un ''vecteur'' e.
}}
''' Exemple 1'''
Nous reprenons l'exemple de la régression linéaire, mais en utilisant cette fois-ci la fonction <code>leastsq()</code>. Lorsque l'on enregistre les données générées, on utilise :
<syntaxhighlight lang="scilab">
write("donnees.txt", [X', Y']);
</syntaxhighlight>
afin d'avoir des vecteurs colonne.
<syntaxhighlight lang="scilab">
clf;
chdir("monrepertoire/");
// **********
// Initialisation
// **********
Ainit=[1;1];
// **********
// Fonctions
// **********
deff("[y] = f(a, b, x)", "y = a*x + b")
deff("[e] = res(A, x, y)", "e = f(A(1),A(2),x) - y")
// **********
// Programme principal
// **********
// lecture des données
donnees = read("donnees.txt", -1, 2)
Xexp = donnees(:, 1);
Yexp = donnees(:, 2);
// regression
[S, Aopt] = leastsq(list(res, Xexp, Yexp),Ainit)
// loi modèle
Ymod = f(Aopt(1), Aopt(2), Xexp);
// affichage
plot(Xexp, Ymod, "-r")
plot(Xexp, Yexp, "+b")
xstring(0, ordonnee, "a = "+string(Aopt(1))+" pour "+string(pente)...
+" ; b = "+string(Aopt(2))+" pour "+string(ordonnee)...
+" ; variance = "+string(S))
</syntaxhighlight>
[[File:Desommation gaussienne lorentzienne.svg|vignette|upright=2|Résultat de la régression.]]
''' Exemple 2'''
Nous travaillons ici avec un pic généré par la somme d'une fonction gaussienne et d'une fonction lorentzienne. Ce genre de profil est classiquement utilisé pour décrire la forme des pics obtenus par diffractométrie X. On fait ce que l'on appelle une désommation de pics (on parle souvent de « déconvolution », mais ce terme est abusif puisqu'il ne s'agit pas de produit de convolution).
<syntaxhighlight lang="scilab">
clf()
// **********
// Constantes
// **********
paramlorentz(1) = 5; // hauteur de la courbe lorentzienne
paramlorentz(2) = 2; // largeur de la courbe lorentzienne
paramgauss(1) = 10; // hauteur de la courbe gaussienne
paramgauss(2) = 3; // largeur de la courbe gaussienne
var=0.5; // variance de la loi normale
nbpts = 100 // nombre de points
demielargeur = max(3*paramgauss(2), 3*paramlorentz(2)) // pour intervalle x
pas = 2*demielargeur/nbpts;
Ainit = [1;1;1;1]; // paramètres initiaux du modèle
// **********
// Initialisation
// **********
X = zeros(nbpts,1);
Y = zeros(nbpts,1);
Yopt = zeros(nbpts,1);
// **********
// Fonctions
// **********
// Fonction gaussienne centrée sur 0
function [y] = gauss(A, x)
// A(1) : hauteur de pic
// A(2) : "largeur" du pic
y = A(1)*exp(-x.*x/A(2));
endfunction
// Fonction lorentzienne centrée sur 0
function [y] = lorentz(A, x)
// A(1) : hauteur de pic
// A(2) : "largeur" du pic
foo = A(2)*A(2)
y = foo*A(1)./(foo + 4*x.*x);
endfunction
function [y] = profil(A, x)
// A(1) : hauteur de pic lorentzien
// A(2) : "largeur" du pic lorentzien
// A(3) : hauteur de pic gaussien
// A(4) : "largeur" du pic gaussien
L = A(1:2);
G = A(3:4);
y = lorentz(L, x) + gauss(G, x);
endfunction
// Résidus
function [e] = residus(A, x, y)
e = profil(A, x) - y;
endfunction
// **********
// Nuage de points
// **********
i=(1:nbpts)';
X = pas*i - demielargeur;
Y = profil([paramlorentz;paramgauss], x) + var*rand(X, "normal");
// **********
// Programme principal
// **********
[S, Aopt] = leastsq(list(residus, X, Y), Ainit)
Yopt = profil(Aopt, X);
YLopt = lorentz(Aopt(1:2),X);
YGopt = gauss(Aopt(3:4),X);
// affichage
plot(X, Yopt, "-r")
plot(X, YLopt, "-c")
plot(X, YGopt, "-g")
plot(X, Y, "+b")
hauteur = paramlorentz(1)+paramgauss(1);
xstring(-demielargeur, hauteur,...
"lorentzienne : Al = "+string(0.01*round(100*Aopt(1)))...
+" ; Hl = "+string(0.01*round(100*Aopt(2))))
xstring(-demielargeur, 3*hauteur/4,...
"gaussienne : Ag = "+string(0.01*round(100*Aopt(3)))...
+" ; Hg = "+string(0.01*round(100*Aopt(4))))
xstring(-demielargeur, hauteur/2,...
"variance : S = "+string(0.01*round(100*S))))
</syntaxhighlight>
L'algorithme par défaut de <code>leastsq()</code> est l'algorithme de pseudo-Newton. On peut aussi utiliser l'[[w:Méthode du gradient conjugué|algorithme du gradient conjugué]] en ajoutant <code>"gc"</code> aux paramètres, ou bien algorithme foncitonnant avec les fonctions non-différentiables avec <code>"nd"</code>. On peut enfin utiliser la commande <code>lsqrsolve()</code>, qui utilise l'algorithme de Levenberg-Marquardt.
== Notes ==
{{références}}
----
''[[Découvrir Scilab/Interpolation, extrapolation et lissage|Interpolation, extrapolation et lissage]]'' < [[Découvrir Scilab|↑]] > ''[[Découvrir Scilab/Calcul différentiel et intégral|Calcul différentiel et intégral]]''
[[Catégorie:Découvrir Scilab (livre)|Regression]]
0z5vzyi485vxsuiiwatioeli2txoeg8
Python pour le calcul scientifique/Annexe/Index
0
83349
769276
768707
2026-07-01T07:02:55Z
Cdang
1202
.append(), .pop(), .remove()
769276
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes_et_n-uplets|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes_et_n-uplets|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes_et_n-uplets|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
1estf9pl6gcatywabapk8hsnutdzs24
769279
769276
2026-07-01T07:06:54Z
Cdang
1202
liens plus précis
769279
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
3qrgzagq3qkmbo2lsgexojnsgzbb6hn
769280
769279
2026-07-01T07:09:35Z
Cdang
1202
/* D */ del()
769280
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
88eo1ypk8i0vv5llb59h0e7nz9aiesl
769282
769280
2026-07-01T07:16:31Z
Cdang
1202
/* S */ .sort()
769282
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
h8ortxtuh8pz5360piiqqbyn23xjez5
769285
769282
2026-07-01T07:19:42Z
Cdang
1202
/* L */ list()
769285
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
3gwf46chnsxzd93kokui7nq3ikyzjlv
769288
769285
2026-07-01T07:33:16Z
Cdang
1202
/* S */ sorted()
769288
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>sorted()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
69rx0u6nnf65rnzqqh6m87tsi785lxl
769290
769288
2026-07-01T07:57:09Z
Cdang
1202
/* I */ iter
769290
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* <code>iter()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>sorted()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
i24is5c02o7wtv0pyza0l9am4opbnf1
769291
769290
2026-07-01T07:57:38Z
Cdang
1202
/* R */ reversed
769291
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* <code>iter()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>reversed()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>sorted()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
nhcavq6ytuscyf0qqg78e98kuv4qqih
769292
769291
2026-07-01T07:58:09Z
Cdang
1202
/* * */ __next__()
769292
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>iterator.__next__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* <code>iter()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>reversed()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>sorted()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
gl5at3b2fzb1a5ite7bpqj4jdcun6xi
769294
769292
2026-07-01T07:59:29Z
Cdang
1202
/* * */ __call__()
769294
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>callable.__call__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Appelable|1]]
* <code>iterator.__next__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* <code>iter()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>reversed()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>sorted()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
0jab1xsrcyatjws242wiltnb2z6i8wj
769296
769294
2026-07-01T08:11:18Z
Cdang
1202
/* * */ _
769296
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>_</code> (tiret d esoulignement, ''{{lang|en|underscore}}'') : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>callable.__call__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Appelable|1]]
* <code>iterator.__next__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* <code>iter()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>reversed()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>sorted()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
lrmdmcxt393xmshgtt1kgrl8l6e0zc2
769297
769296
2026-07-01T08:12:07Z
Cdang
1202
/* * */
769297
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>_</code> (tiret de soulignement, ''{{lang|en|underscore}}'') : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]], [[../../Éléments_de_programmation#Substitution_de_variables|2]]
* <code>callable.__call__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Appelable|1]]
* <code>iterator.__next__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* <code>iter()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>reversed()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>sorted()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
lp8ns53kklnp5ytof4ql82b7eelmtre
769298
769297
2026-07-01T08:13:04Z
Cdang
1202
/* * */
769298
wikitext
text/x-wiki
{{SommaireCompact}}
== * ==
* <code>+</code> (plus) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>+=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>-</code> (moins) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|3]]
* <code>-=</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>*</code> (astérisque) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>**</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>/</code> (barre de fraction) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>//</code> : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>^</code> (circonflexe) : [[../../Découverte_de_Python_et_de_Jupyter#cite_note-2|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&</code> (esperluette) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>&=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>|</code> (tube) : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|2]]
* <code>|=</code> : [[../../Découverte de Python et de Jupyter#Les booléens|1]]
* <code>_</code> (tiret de soulignement, ''{{lang|en|underscore}}'') : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]], [[../../Éléments_de_programmation#Substitution_de_variables|2]]
* <code>callable.__call__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Appelable|1]]
* <code>iterator.__next__()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== A ==
* <code>plt.add_subplot()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axis.add_patch()</code> : [[../../Graphiques#Dessins|1]]
* aléatoire (générateur de nombres pseudo-~) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Graphiques|2]], [[../../Polynômes#Régression polynomiale|3]], [[../../Statistiques#Fréquence, histogramme|'''4''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]], [[../../Régression et optimisation#Régression linéaire|6]]
* <code>and</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]], [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|2]] <br />voir [[#*|&]], [[#L|np.logical_all()]]
* <code>all</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]
* <code>list.append()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>axes.annotate()</code> : [[../../Graphiques#Annotations|1]]
* <code>np.arange()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Premier_tracé_graphique|1]], [[../../Éléments_de_programmation#Définition_en_compréhension|2]], [[../../Graphiques|3]], [[../../Manipulation_de_matrices#Définir_un_tenseur|'''3''']]<br /> → [[#R|<code>range()</code>]]
* <code>np.array()</code> (classe <code>ndarray</code>) : [[../../Fonctions_mathématiques_générales#Vecteurs_et_matrices|1]], [[../../Éléments_de_programmation#Exploiter_le_contenu_d'un_fichier_texte|2]], [[../../Graphiques#Transformation_des_objets_graphiques|3]], [[../../Manipulation_de_matrices|'''4''']], [[../../Statistiques#Méthodes_de_matrices|5]], [[../../Algèbre_linéaire#Opérations_vectorielles|6]]
* <code>float.as_integer_ratio()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]], [[../../Éléments_de_programmation#Réels|2]]
* <code>fig.axes</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
== B ==
* <code>plt.bar()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* booléens : [[../../Découverte de Python et de Jupyter#Les booléens|1]], [[../../Fonctions mathématiques générales#Fonctions booléennes|2]]
* <code>break()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== C ==
* ''{{lang|en|callable}}'' (« appelable ») : [[../../Découverte_de_Python_et_de_Jupyter#Appelable_(callable)|1]]
* <code>str.capitalize()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.center()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>chr()</code> : [[../../Éléments_de_programmation#Autres_fonctions|1]]
* classe (d'un langage orienté objet) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* <code>color</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>fig.colorbar()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* complexe (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* compréhension (définition en) : [[../../Éléments_de_programmation#Définition_en_compréhension|1]]
* <code>itertools.compress()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>plt.contour()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>plt.contourf()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>continue()</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== D ==
* <code>def</code> : [[../../Éléments_de_programmation#Fonction|1]]
* <code>del()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* division euclidienne : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>divmode()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>dpi</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
== E ==
* <code>edgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>elif</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>else</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* <code>enumerate()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* espace de nom (<code>np.</code>, <code>plt.</code>, <code>scipy.</code>…) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]], [[../../Découverte_de_Python_et_de_Jupyter#Les_espaces_de_noms|2]]
== F ==
* <code>facecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>figsize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>fillstyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>str.find()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* fonction (définir une ~) : [[../../Éléments_de_programmation#Fonction|1]]
* <code>for</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== G ==
* <code>plt.gca()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* <code>plt.gcf()</code> : [[../../Graphiques#Styles_de_codage_«_pyplot_»_et_«_OO_»|1]]
* GIF animé : [[../../Graphiques#Créer_un_GIF_animé|1]]
== H ==
* <code>plt.hist()</code> : [[../../Graphiques|1]]
* <code>html</code> (module) : [[../../Découverte_de_Python_et_de_Jupyter#Les_chaînes_de_caractères|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]]
== I ==
* <code>if</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
* imaginaire (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>in</code> : [[../../Découverte de Python et de Jupyter#Les ensembles et les dictionnaires|1]], [[../../Éléments de programmation#Définition en compréhension|2]]
* infini +∞, <code>float("inf")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* instance (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* installation d'un module : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* <code>is</code> : [[../../Découverte_de_Python_et_de_Jupyter#Les_booléens|1]]
* <code>str.isdigit()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>float.is_integer()</code> : [[../../Éléments_de_programmation#Réels|1]]
* <code>iter()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* itérable : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
== J ==
* <code>j</code> (imaginaire) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
== L ==
* LaTeX : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* <code>layout</code> (paramètre) : [[../../Graphiques#Mise_en_forme_de_la_figure|1]]
* <code>plt.legend()</code> : [[../../Graphiques|1]], [[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|2]]
* <code>linear</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>linestyle</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>linewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>list()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.ljust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>log</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>np.logical_and()</code> : [[../../Fonctions_mathématiques_générales#Fonctions_booléennes|1]]<br /> voir [[#A|and]]
* <code>logit</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>str.lower()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>ls</code> (paramètre) : voir ''linestyle''
* <code>lw</code> (paramètre) : voir ''linewidth''
== M ==
* <code>marker</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markeredgewidth</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markerfacecolor</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>markersize</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* Matplotlib (module, <code>np</code>) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]<br />→ [[#P|Pyplot]]
* <code>np.matrix()</code> (déprécié) : [[../../Manipulation_de_matrices#Différence_entre_array_et_matrix|1]], [[../../Algèbre_linéaire#Opérations_vectorielles|2]]<br />→ [[#A|<code>np.array()</code>]]
* <code>np.meshgrid()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* méthode (d'une classe) : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
* module : [[../../Découverte_de_Python_et_de_Jupyter#Vocabulaire|1]]
== N ==
* NaN ''(not a number)'', <code>float("nan")</code> : [[../../Découverte_de_Python_et_de_Jupyter#Commandes_élémentaires|1]]
* <code>nextafter()</code> : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]]
* <code>normal()</code> [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|5]]
* <code>np.</code> : espace de nom, abréviation de <code>numpy.</code><br />→ Numpy
* Numpy (module) : [[../../Découverte de Python et de Jupyter|1]]
== P ==
* <code>str.partition()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* ''patch'' (pièce, dessin) : [[../../Graphiques#Dessins|1]]
* <code>plt.pcolormesh()</code> : [[../../Graphiques#Cartes_de_valeurs_et_de_vecteurs|1]]
* <code>pip install</code> : [[../../Découverte de Python et de Jupyter#Installation et mise à jour de modules|1]]
* PIL (module ''Python imaging library'') : [[../../Graphiques#Créer_un_GIF_animé|1]]
* <code>plt.plot()</code> : [[../../Graphiques|1]]
* <code>plt.plot_surface()</code> : [[../../Graphiques#Surfaces_3D|1]]
* <code>plt</code> : espace de nom, abréviation de <code>pyplot.</code><br />→ <code>plt</code>
* <code>plt.polar()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>list.pop()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>pow()</code> : [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|1]]
* puissance (élévation à la) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]], [[../../Fonctions mathématiques générales#Rappel sur les opérations de base|2]]
* <code>pyplot</code> (<code>plt</code>, option de Matplotlib) : [[../../Découverte de Python et de Jupyter#Premier tracé graphique|1]], [[../../Graphiques|2]]
* PyQt (module) : [[../../Éléments_de_programmation#Avec_PyQt|1]]
== Q ==
* <code>plt.quiver()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
== R ==
* <code>rand()</code> : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']]
* <code>randn()</code> : [[../../Graphiques|1]], [[../../Polynômes#Régression polynomiale|2]], [[../../Statistiques#Fréquence, histogramme|'''3''']], [[../../Régression et optimisation#Régression linéaire|4]]
* <code>random</code> (module NumPy) : [[../../Éléments de programmation#Utilisation de Pandas|1]], [[../../Statistiques#Fréquence, histogramme|'''2''']], [[../../Interpolation, extrapolation et lissage#Avec le module scipy.signal|3]]
* <code>range()</code> : [[../../Premiers programmes#Deuxième_programme|1]], [[../../Éléments_de_programmation#Autres_fonctions|2]], [[../../Éléments_de_programmation#Définition_en_compréhension|3]], [[../../Éléments_de_programmation#Structures_de_contrôle|4]]<br /> → [[#A|<code>np.arange()</code>]]
* <code>plt.rcParams()</code> : [[../../Graphiques#Mise_en_forme_du_texte|1]]
* réel à virgule flottante (nombre) : [[../../Découverte de Python et de Jupyter#Commandes élémentaires|1]]
* <code>list.remove()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>str.replace()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>reversed()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.rfind()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>str.rjust()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== S ==
* <code>plt.savefig()</code> : [[../../Graphiques#Exemple|1]]
* <code>line2D.set()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>axis.set_aspect()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>line2D.set_label()</code>[[../../Graphiques#Plusieurs_courbes_sur_un_même_système_d'axes|1]]
* <code>line2D.set_linestyle()</code> (paramètre) : [[../../Graphiques#Mise_en_forme_d'une_courbe|1]]
* <code>axes.set_rticks()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_thetagrids()</code> : [[../../Graphiques#Tracé_polaire|1]]
* <code>axes.set_title()</code> : [[../../Graphiques#Exemple|1]]
* <code>axes.set_xlabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_xlim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_xsticks()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* <code>axes.set_ylabel()</code> : [[../../Graphiques#Exemple|1]]
* <code>axis.set_ylim()</code> : [[../../Graphiques#Dessins|1]]
* <code>axis.set_minor_formatter()</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
* ''shebang'' : [[../../Découverte de Python et de Jupyter|1]]
* <code>plt.show()</code> : [[../../Graphiques|1]]
* <code>list.sort()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Listes|1]]
* <code>sorted()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
* <code>str.split()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
* <code>plt.step()</code> : [[../../Graphiques#Autres_exemples_de_tracés_2D|1]]
* <code>plt.subplots()</code> : [[../../Graphiques#Exemple|1]]
* <code>fig.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>plt.suptitle()</code> : [[../../Graphiques#Exemple|1]]
* <code>symlog</code> (paramètre) : [[../../Graphiques#Gestion_des_échelles|1]]
== T ==
* <code>plt.text()</code> : [[../../Graphiques#Annotations|1]]
* <code>plt.title()</code> : [[../../Graphiques|1]]
* <code>aix.transData()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>transform</code> (paramètre) : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* <code>matplotlib.transforms()</code> : [[../../Graphiques#Transformation_des_objets_graphiques|1]]
* Tk (module) : [[../../Éléments_de_programmation#Avec_Tk|1]]
== U ==
* <code>str.upper()</code> : [[../../Éléments_de_programmation#Méthodes_des_chaînes|1]]
== W ==
* <code>where()</code> : [[../../Manipulation_de_matrices#Trouver_une_valeur|1]]
* <code>while</code> : [[../../Éléments_de_programmation#Structures_de_contrôle|1]]
== X ==
* <code>plt.xlabel()</code> : [[../../Graphiques|1]]
== Y ==
* <code>plt.ylabel()</code> : [[../../Graphiques|1]]
== Z ==
* <code>zip()</code> : [[../../Découverte_de_Python_et_de_Jupyter#Itérable|1]]
----
[[../../Traitement d'images|Traitement d'images]] < [[../../|↑]] >
[[Catégorie:Python pour le calcul scientifique (livre)]]
dcd5k7g1rjmmldo9n6q9tpo8avgbz1n
Catégorie:Discipline philosophique
14
83477
769259
764926
2026-07-01T03:58:29Z
PandaMystique
119061
769259
wikitext
text/x-wiki
[[catégorie:Philosophie]]
0lxbnq4i4v1nqloofp2gm9eqtcz6p4t
Catégorie:Théorie de la connaissance
14
84029
769256
2026-07-01T03:52:18Z
PandaMystique
119061
Page créée avec « [[Catégorie:Discipline philosophique]] »
769256
wikitext
text/x-wiki
[[Catégorie:Discipline philosophique]]
08d5py569n2prl4un6bob6eoalb349u
769257
769256
2026-07-01T03:53:36Z
PandaMystique
119061
769257
wikitext
text/x-wiki
[[Catégorie:Discipline philosophique]]
[[Catégorie:Épistémologie]]
4b6w0oljebqo5w53l5xas5cnxcvf4ee
Catégorie:Théorie de la connaissance (livre)
14
84030
769261
2026-07-01T03:59:19Z
PandaMystique
119061
Page créée avec « [[Catégorie:Théorie de la connaissance]] »
769261
wikitext
text/x-wiki
[[Catégorie:Théorie de la connaissance]]
pl8jnaif3ptgdi54cc2qivsnggbc5bk