Main
%define=exo color=red%
%define=quest color=blue%
Saisir dans un fichier texte @@college.dat@@ les deux colonnes de nombres suivantes (vous utiliserez TextEdit, nedit, gedit, emacs ...). Ces nombres correspondent à des notes (2 épreuves) d'élèves (15) sur lesquelles nous travaillerons par la suite.
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
(:source lang=python:)
notes = np.loadtxt('college.dat')
(:sourceend:)
Après avoie recharger @@"ressources/lettres.pkl"@@ dans une variable @@result@@, on accède aux champs en faisant:
* @@result.letters@@ et @@result.labs@@
>>block bgcolor=#ffbbbb <<
!!!! Génération de données
>><<
10.00000 0.84590 0.00000
Si la syntaxe est trop lourde:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
(:sourceend:)
!!! Exercice de synthèse
!!!%part% Affichage console
Pour afficher une variable @@v@@:
print(v1) # parenthèses obligatoires en python 3
Pour afficher un message formaté:
!!!! Astuce pour créer des matrices d'un autre type:
(:source lang=python:)
# une matrice d'entier
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
(:sourceend:)
!!!! Concaténation de matrices
@@hstack@@ et @@vstack@@
print(v1) # parenthèses obligatoires en python 3
Pour afficher un message formaté:
!!!%part% Affichage console
Pour afficher une variable @@v@@:
Pour faire le bilan des variables existant dans l'environnement actuel:
Si la syntaxe est trop lourde:
whos # ne marche que sous ipython
(:sourceend:)
Si la syntaxe est trop lourde:
(:source lang=python:)
!!!%part% Etat de la mémoire
Pour faire le bilan des variables existant dans l'environnement actuel:
!!! Etat de la mémoire
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape # (15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
(:sourceend:)
!!! Concaténation
@@hstack@@ et @@vstack@@
(:source lang=python:)
m6 = np.vstack((np.array([[1, 2], [3, 4]]), np.ones((3,2))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
(:sourceend:)
Donne:
toto 1 blabla
toto 10 blabla
# (sans formatage:)
toto 1 blabla
toto 10 blabla
Pour afficher plusieurs arguments il faut donner un tuple après le %:
i=1
j=10.6758765
print 'toto %2d %5.2f blabla' % (i,j) # toto 1 10.68 blabla
(:sourceend:)
Pour aller plus loin dans le formatage des affichages:
http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting
Pour faire le bilan des variables existant dans l'environnement actuel:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
Le code de formatage est le même qu'en C:
* %c : caractère
* %d : entier
* %f : réel
* %s : string
Si on ajoute un chiffre: l'affichage réserve une place (%2d : 2 caractères de réservés)\\
Si on ajoute un point: affichage tronqué des décimales (%.2f : seulement 2 chiffres après la virgule sont affichés)
Pour afficher un message formaté (très pratique pour un tableau de données):
(:source lang=python:)
i=1
j=10
print'toto %2d blabla' % i
print 'toto %2d blabla' % j
(:sourceend:)
a = 2 # variable contenant la valeur 2
m0 = np.array([[1, 2], [3, 4]]) # matrice
# matrice = vecteur de vecteurs
v1 = np.arange(0, 10, 1) # create a range
# arguments: start, stop, step
v1 = np.arange(0, 10) # with default arg
v2 = np.linspace(0, 10, 15) # avec linspace, le début et la fin SONT inclus
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
Après avoie recharger @@"ressources/lettres.pkl"@@ dans une variable @@result@@, on accède aux champs en faisant:
* @@result.letters@@ et @@result.labs@@
A = np.array([1,2,3,4,5])
A[1:3] # array([2, 3])
# On peut omettre n'importe lequel des argument dans M[start:stop:step]:
A[::] # indices de début, fin, et pas avec leurs valeurs par défaut
# array([ 1, -2, -3, 4, 5])
A[::2] # pas = 2, indices de début et de fin par défaut
# array([ 1, -3, 5])
A[:3] # les trois premiers éléments (indices 0,1,2)
# array([ 1, -2, -3])
A[3:] # à partir de l'indice 3
# array([4, 5])
# On peut utiliser des indices négatifs :
A[-1] # le dernier élément
# 5
A[-3:] # les 3 derniers éléments
# array([3, 4, 5])
!![[Course.CourseRFIDECTutoPython|Retour vers le tutoriel complet]]
# comparer v1 et v2
print v1
print v2
# afficher plusieurs choses dans la même commande
print v1, " ", v2
(:sourceend:)
Pour aller plus loin dans le formatage des affichages:
http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting
Pour faire le bilan des variables existant dans l'environnement actuel:
whos # ne marche que sous ipython
(:sourceend:)
Si la syntaxe est trop lourde:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
!!!! Astuce pour créer des matrices d'un autre type:
# une matrice d'entier
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
!!! Affectation/récupération de valeurs
Récupération de valeurs
# une matrice
mat = np.ones((5,6))
mat[0,0] # récupération de la première valeur
mat[0,:] # récupération de la première ligne
mat[0,0:2] # récupération des valeurs d'indice 0 et 1
# petites astuces supplémentaires
mat[0,1:] # toute la ligne sauf la première case
mat[0,:-1] # toute la ligne sauf la dernière case
mat[0,:-2] # toute la ligne sauf les deux dernières cases
Affectation sur le même principe:
# une matrice d'entier
mat = np.ones((5,6))
mat[0,0:2] = 1 # affectation en bloc
mat[0,0:2] = np.zeros((1,2)) # affectation en bloc d'une autre matrice
!!! Chargement/sauvegarde de matrices de valeurs
Syntaxe simple et intuitive (+formattage optionnel proche du C/JAVA):
np.savetxt("random-matrix.txt", m5)
# donne le fichier:
# 1.000000000000000000e+00 2.000000000000000000e+00
# 3.000000000000000000e+00 4.000000000000000000e+00
np.savetxt("random-matrix.csv", m5, fmt='%.5f', delimiter=',')
# donne le fichier:
# 1.00000,2.00000
# 3.00000,4.00000
Saisir dans un fichier texte @@college.dat@@ les deux colonnes de nombres suivantes (vous utiliserez TextEdit, nedit, gedit, emacs ...). Ces nombres correspondent à des notes (2 épreuves) d'élèves (15) sur lesquelles nous travaillerons par la suite.
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
notes = np.loadtxt('college.dat')
!!! Etat de la mémoire
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape #(15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
!!! Chargement/sauvegarde de matrices de valeurs
Syntaxe simple et intuitive (+formattage optionnel proche du C/JAVA):
m6 = np.vstack((np.array([[1, 2], [3, 4]]), np.ones((3,2))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
Saisir dans un fichier texte @@college.dat@@ les deux colonnes de nombres suivantes (vous utiliserez TextEdit, nedit, gedit, emacs ...). Ces nombres correspondent à des notes (2 épreuves) d'élèves (15) sur lesquelles nous travaillerons par la suite.
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
(:source lang=python:)
notes = np.loadtxt('college.dat')
(:sourceend:)
!!! Etat de la mémoire
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape # (15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
(:sourceend:)
!!! Concaténation
@@hstack@@ et @@vstack@@
(:source lang=python:)
m6 = np.vstack((np.array([[1, 2], [3, 4]]), np.ones((3,2))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
(:sourceend:)
!!! Affichage console
Pour afficher une variable @@v@@:
(:source lang=python:)
print v
(:sourceend:)
Pour afficher un message formaté:
(:source lang=python:)
print 'toto %d' % i
(:sourceend:)
Le code de formatage est le même qu'en C:
* %c : caractère
* %d : entier
* %f : réel
* %s : string
Si on ajoute un chiffre: l'affichage réserve une place (%2d : 2 caractères de réservés)\\
Si on ajoute un point: affichage tronqué des décimales (%.2f : seulement 2 chiffres après la virgule sont affichés)
Pour afficher un message formaté (très pratique pour un tableau de données):
(:source lang=python:)
i=1
j=10
print 'toto %2d blabla' % i
print 'toto %2d blabla' % j
(:sourceend:)
Donne:
toto 1 blabla
toto 10 blabla
# (sans formatage :)
toto 1 blabla
toto 10 blabla
Pour afficher plusieurs arguments il faut donner un tuple après le %:
(:source lang=python:)
i=1
j=10.6758765
print 'toto %2d %5.2f blabla' % (i,j) # toto 1 10.68 blabla
(:sourceend:)
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
!!!! Création de matrices spéciales à l'aide de fonctions dédiées
Tester les fonctions ci-dessous.
(:source lang=python:)
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
(:sourceend:)
!![[Course.CourseRFIDECTutoPython|Retour vers le tutoriel complet]]
!! Gestion des entrées/sorties, déclaration des variables
Les variables sont créées automatiquement lors de leur déclaration.
Le type des variables est déterminé automatiquement.
!!! Création de variables, les approches classiques
Taper les lignes de code suivantes et visualiser les résultats.
NB : le code sera tapé dans un fichier puis le fichier sera exécuté, la console ne servira qu'à visualiser le résultat.
!!!! Création directe
(:source lang=python:)
a = 2 # variable contenant la valeur 2
m0 = np.array([[1, 2], [3, 4]]) # matrice
# matrice = vecteur de vecteurs
v1 = np.arange(0, 10, 1) # create a range
# arguments: start, stop, step
v1 = np.arange(0, 10) # with default arg
v2 = np.linspace(0, 10, 15) # avec linspace, le début et la fin SONT inclus
(:sourceend:)
!!!! Affichage at monitoring
Pour l'affichage, deux solutions: taper le nom de la variable à la fin de l'exécution ou utiliser la commande @@print@@ en cours de script
(:source lang=python:)
# comparer v1 et v2
print v1
print v2
# afficher plusieurs choses dans la même commande
print v1, " ", v2
(:sourceend:)
Pour aller plus loin dans le formatage des affichages:
http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting
Pour faire le bilan des variables existant dans l'environnement actuel:
(:source lang=python:)
whos # ne marche que sous ipython
(:sourceend:)
!!!! Création de matrices spéciales à l'aide de fonctions dédiées
Tester les fonctions ci-dessous.
(:source lang=python:)
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
(:sourceend:)
Si la syntaxe est trop lourde:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
(:sourceend:)
!!!! Astuce pour créer des matrices d'un autre type:
(:source lang=python:)
# une matrice d'entier
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
(:sourceend:)
!!! Affectation/récupération de valeurs
Récupération de valeurs
(:source lang=python:)
# une matrice d'entier
mat = np.ones((5,6))
mat[0,0] # récupération de la première valeur
mat[0,:] # récupération de la première ligne
mat[0,0:2] # récupération des valeurs d'indice 0 et 1
(:sourceend:)
Affectation sur le même principe:
# une matrice d'entier
mat = np.ones((5,6))
mat[0,0:2] = 1 # affectation en bloc
mat[0,0:2] = np.zeros((1,2)) # affectation en bloc d'une autre matrice
(:sourceend:)
!!! Chargement/sauvegarde de matrices de valeurs
Syntaxe simple et intuitive (+formattage optionnel proche du C/JAVA):
(:source lang=python:)
np.savetxt("random-matrix.txt", m5)
# donne le fichier:
# 1.000000000000000000e+00 2.000000000000000000e+00
# 3.000000000000000000e+00 4.000000000000000000e+00
np.savetxt("random-matrix.csv", m5, fmt='%.5f', delimiter=',')
# donne le fichier:
# 1.00000,2.00000
# 3.00000,4.00000
(:sourceend:)
Saisir dans un fichier texte @@college.dat@@ les deux colonnes de nombres suivantes (vous utiliserez TextEdit, nedit, gedit, emacs ...). Ces nombres correspondent à des notes (2 épreuves) d'élèves (15) sur lesquelles nous travaillerons par la suite.
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
(:source lang=python:)
notes = np.loadtxt('college.dat')
(:sourceend:)
!!! Etat de la mémoire
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape # (15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
(:sourceend:)
!!! Concaténation
@@hstack@@ et @@vstack@@
(:source lang=python:)
m6 = np.vstack((np.array([[1, 2], [3, 4]]), np.ones((3,2))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
(:sourceend:)
>>block bgcolor=#ffbbbb <<
!!! Exercice de synthèse
Nous souhaitons créer une matrice 10x3 dont la première colonne contient les indices 1 à 10 dans l'ordre. La seconde colonne contiendra des nombres aléatoires entre 0 et 1. La troisième colonne ne contiendra que des 0.
Vous ajouterez ensuite une ligne en haut de la matrice contenant les indices de colonne 1 à 3.
NB: vous pouvez créer des matrices dans des matrices, c'est-à-dire faire appel à des fonctions dans les [].
>><<
Exemple de résultat possible:
1.00000 2.00000 3.00000
1.00000 0.03479 0.00000
2.00000 0.66074 0.00000
3.00000 0.15187 0.00000
4.00000 0.03640 0.00000
5.00000 0.62497 0.00000
6.00000 0.54774 0.00000
7.00000 0.68919 0.00000
8.00000 0.86146 0.00000
9.00000 0.72030 0.00000
10.00000 0.84590 0.00000
!!! Affichage console
Pour afficher une variable @@v@@:
(:source lang=python:)
print v
(:sourceend:)
Pour afficher un message formaté:
(:source lang=python:)
print 'toto %d' % i
(:sourceend:)
Le code de formatage est le même qu'en C:
* %c : caractère
* %d : entier
* %f : réel
* %s : string
Si on ajoute un chiffre: l'affichage réserve une place (%2d : 2 caractères de réservés)\\
Si on ajoute un point: affichage tronqué des décimales (%.2f : seulement 2 chiffres après la virgule sont affichés)
Pour afficher un message formaté (très pratique pour un tableau de données):
(:source lang=python:)
i=1
j=10
print 'toto %2d blabla' % i
print 'toto %2d blabla' % j
(:sourceend:)
Donne:
toto 1 blabla
toto 10 blabla
# (sans formatage :)
toto 1 blabla
toto 10 blabla
Pour afficher plusieurs arguments il faut donner un tuple après le %:
(:source lang=python:)
i=1
j=10.6758765
print 'toto %2d %5.2f blabla' % (i,j) # toto 1 10.68 blabla
(:sourceend:)
Main.TutoPythonIO History
Hide minor edits - Show changes to output
Changed line 200 from:
data = pkl.load(file('ressources/usps_small.pkl','rb')) # attention à donner un file + option lecture (pas juste un nom de fichier)
to:
data = pkl.load(open('ressources/usps_small.pkl','rb')) # attention à donner un file + option lecture (pas juste un nom de fichier)
Deleted line 0:
Changed lines 2-4 from:
%define=exo apply=block bgcolor=#ffdddd%
to:
%define=exo apply=block bgcolor=#ffbbbb%
Changed line 207 from:
!!!%exo% Exercice de synthèse
to:
!!!%exo% Exercices de synthèse
Changed lines 1-2 from:
%define=quest color=blue%
to:
Changed lines 3-5 from:
to:
%define=exo apply=block bgcolor=#ffdddd%
Changed line 208 from:
!!!%part% Exercice de synthèse
to:
!!!%exo% Exercice de synthèse
Changed lines 181-204 from:
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
(:source lang=python:)
notes = np.loadtxt('college.dat')
(:sourceend:)
to:
Deleted lines 204-206:
* @@result.letters@@ et @@result.labs@@
Changed lines 208-211 from:
to:
!!!! Génération de données
Changed lines 217-218 from:
to:
Changed lines 231-260 from:
to:
10.00000 0.84590 0.00000
!!!! Sauvegarde/chargement de données
Saisir dans un fichier texte @@college.dat@@ les deux colonnes de nombres suivantes (vous utiliserez TextEdit, nedit, gedit, emacs ...). Ces nombres correspondent à des notes (2 épreuves) d'élèves (15) sur lesquelles nous travaillerons par la suite.
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
(:source lang=python:)
notes = np.loadtxt('college.dat')
(:sourceend:)
Après avoie recharger @@"ressources/lettres.pkl"@@ dans une variable @@result@@, on accède aux champs en faisant:
* @@result.letters@@ et @@result.labs@@
!!!! Sauvegarde/chargement de données
Saisir dans un fichier texte @@college.dat@@ les deux colonnes de nombres suivantes (vous utiliserez TextEdit, nedit, gedit, emacs ...). Ces nombres correspondent à des notes (2 épreuves) d'élèves (15) sur lesquelles nous travaillerons par la suite.
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
(:source lang=python:)
notes = np.loadtxt('college.dat')
(:sourceend:)
Après avoie recharger @@"ressources/lettres.pkl"@@ dans une variable @@result@@, on accède aux champs en faisant:
* @@result.letters@@ et @@result.labs@@
Deleted lines 76-82:
Si la syntaxe est trop lourde:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
(:sourceend:)
Changed lines 212-213 from:
>>block bgcolor=#bbffbb <<
to:
>>block bgcolor=#eeffee <<
Changed line 239 from:
to:
!!!%part% Exercice de synthèse
Changed line 241 from:
to:
Changed lines 52-56 from:
Pour afficher une variable @@v@@
to:
!!!! Astuce pour créer des matrices d'un autre type:
Changed lines 55-58 from:
to:
# une matrice d'entier
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
Changed lines 61-63 from:
to:
!!!%part% Affichage console
Pour afficher une variable @@v@@:
Pour afficher une variable @@v@@:
Changed line 65 from:
print("{} : {}".format("la valeur est ", m5[0][0]))
to:
print(v1) # parenthèses obligatoires en python 3
Added lines 68-72:
Pour afficher un message formaté:
(:source lang=python:)
print("{} : {}".format("la valeur est ", m5[0][0]))
(:sourceend:)
(:source lang=python:)
print("{} : {}".format("la valeur est ", m5[0][0]))
(:sourceend:)
Changed lines 85-92 from:
(:source lang=python:)
# une matrice d'entier
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
(:sourceend:)
to:
Changed lines 42-44 from:
!!!%part% Affichage console
Pour afficher une variable@@v@@:
Pour afficher une variable
to:
!!!! Concaténation de matrices
@@hstack@@ et @@vstack@@
Changed lines 48-49 from:
to:
m6 = np.vstack((np.array([[1, 2], [3, 4]]), np.ones((3,2))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
Changed lines 52-56 from:
to:
!!!%part% Affichage console
Pour afficher une variable @@v@@:
Changed line 58 from:
print("{} : {}".format("la valeur est ", m5[0][0]))
to:
print(v1) # parenthèses obligatoires en python 3
Added lines 61-65:
Pour afficher un message formaté:
(:source lang=python:)
print("{} : {}".format("la valeur est ", m5[0][0]))
(:sourceend:)
(:source lang=python:)
print("{} : {}".format("la valeur est ", m5[0][0]))
(:sourceend:)
Changed lines 70-71 from:
to:
Si la syntaxe est trop lourde:
Deleted lines 73-77:
(:sourceend:)
Si la syntaxe est trop lourde:
(:source lang=python:)
Changed lines 128-131 from:
!!! Types de base vs objets
Comme dans tous les langages, il faut faire attention aux copies de surface:
Comme dans tous les langages, il faut faire attention aux copies de surface
to:
!!!%part% Etat de la mémoire
Pour faire le bilan des variables existant dans l'environnement actuel:
Added lines 135-153:
whos # ne marche que sous ipython
(:sourceend:)
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape # (15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
(:sourceend:)
!!!! Types de base vs objets
Comme dans tous les langages, il faut faire attention aux copies de surface:
(:source lang=python:)
(:sourceend:)
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape # (15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
(:sourceend:)
!!!! Types de base vs objets
Comme dans tous les langages, il faut faire attention aux copies de surface:
(:source lang=python:)
Deleted lines 238-258:
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape # (15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
(:sourceend:)
!!! Concaténation
@@hstack@@ et @@vstack@@
(:source lang=python:)
m6 = np.vstack((np.array([[1, 2], [3, 4]]), np.ones((3,2))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
(:sourceend:)
Changed lines 42-43 from:
!!! Affichage console
to:
!!!%part% Affichage console
Changed lines 79-80 from:
!!! Affectation/récupération de valeurs
to:
!!!%part% Affectation/récupération de valeurs
Changed line 142 from:
!!! Chargement/sauvegarde de matrices de valeurs
to:
!!!%part% Chargement/sauvegarde de matrices de valeurs
Added lines 1-4:
%define=exo color=red%
%define=quest color=blue%
%define=part apply=block bgcolor=#e6d8c0%
%define=quest color=blue%
%define=part apply=block bgcolor=#e6d8c0%
Changed line 12 from:
!!! Création de variables, les approches classiques
to:
!!!%part% Création de variables, les approches classiques
Changed line 122 from:
m2 = m
to:
m2 = m # shallow copy (évidemment)
Added lines 129-134:
m3 = m.copy() # deep copy
m3[0][1] = 6
print(m)
# Affichage => m inchangée
# [[5 2]
# [3 4]]
m3[0][1] = 6
print(m)
# Affichage => m inchangée
# [[5 2]
# [3 4]]
Added lines 122-127:
m2 = m
m2[0][0] = 5
print(m)
# Affichage
# [[5 2]
# [3 4]]
m2[0][0] = 5
print(m)
# Affichage
# [[5 2]
# [3 4]]
Added lines 116-123:
!!! Types de base vs objets
Comme dans tous les langages, il faut faire attention aux copies de surface:
(:source lang=python:)
m = np.array([[1, 2], [3, 4]])
(:sourceend:)
Comme dans tous les langages, il faut faire attention aux copies de surface:
(:source lang=python:)
m = np.array([[1, 2], [3, 4]])
(:sourceend:)
Changed line 50 from:
Pour toutes les règles de formatage avancé : [[https://pyformat.info|lien]]
to:
Pour toutes les règles de formatage avancé : [[https://pyformat.info|lien]]\\
Changed lines 54-61 from:
toto 1 blabla
toto 10 blabla
# (sans formatage
toto 1 blabla
toto 10 blabla
Pour afficher plusieurs arguments il faut donner un tuple après le %:
to:
Pour faire le bilan des variables existant dans l'environnement actuel:
Deleted lines 56-66:
j=10.6758765
print 'toto %2d %5.2f blabla' % (i,j) # toto 1 10.68 blabla
(:sourceend:)
Pour aller plus loin dans le formatage des affichages:
http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting
Pour faire le bilan des variables existant dans l'environnement actuel:
(:source lang=python:)
Changed lines 62-63 from:
to:
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
Changed line 47 from:
print 'toto %d' % i
to:
print("{} : {}".format("la valeur est ", m5[0][0]))
Changed lines 50-65 from:
* %d : entier
* %f : réel
* %s : string
Si on ajoute un chiffre: l
Si on ajoute un point: affichage tronqué des décimales (%.2f : seulement 2 chiffres après la virgule sont affichés)
Pour afficher un message formaté (très pratique pour un tableau de données):
(:source lang=python:)
i=1
j=10
print 'toto %2d blabla' % j
(:sourceend:)
to:
Pour toutes les règles de formatage avancé : [[https://pyformat.info|lien]]
''' Ne pas tester en TME {$\Rightarrow$} à la maison'''
''' Ne pas tester en TME {$\Rightarrow$} à la maison'''
Changed line 42 from:
print(v) # parenthèses obligatoires en python 3
to:
print(v1) # parenthèses obligatoires en python 3
Changed line 42 from:
print v
to:
print(v) # parenthèses obligatoires en python 3
Changed line 27 from:
m2 = np.ones((5,4)) # matrice de 0
to:
m2 = np.zeros((5,4)) # matrice de 0
Changed lines 16-35 from:
to:
a = 2 # variable contenant la valeur 2
m0 = np.array([[1, 2], [3, 4]]) # matrice
# matrice = vecteur de vecteurs
v1 = np.arange(0, 10, 1) # create a range
# arguments: start, stop, step
v1 = np.arange(0, 10) # with default arg
v2 = np.linspace(0, 10, 15) # avec linspace, le début et la fin SONT inclus
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
m0 = np.array([[1, 2], [3, 4]]) # matrice
# matrice = vecteur de vecteurs
v1 = np.arange(0, 10, 1) # create a range
# arguments: start, stop, step
v1 = np.arange(0, 10) # with default arg
v2 = np.linspace(0, 10, 15) # avec linspace, le début et la fin SONT inclus
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
Added line 36:
# la plupart des fonctions numpy acceptent la syntaxe objet et la syntaxe non-objet.
Changed lines 191-192 from:
!!! @@loadtxt/savetxt@@: idéal pour MAPSI...
to:
!!!! @@loadtxt/savetxt@@: idéal pour MAPSI...
Changed lines 196-197 from:
!!! ... Mais pour le python, on préfère souvent @@pickle@@
to:
!!!! ... Mais pour le python, on préfère souvent @@pickle@@
Added lines 210-212:
Après avoie recharger @@"ressources/lettres.pkl"@@ dans une variable @@result@@, on accède aux champs en faisant:
* @@result.letters@@ et @@result.labs@@
Added lines 189-211:
>>block bgcolor=#bbffbb <<
!!! @@loadtxt/savetxt@@: idéal pour MAPSI...
* Chargement/sauvegarde des matrices, format lisible de l'extérieur si besoin
* Echanges possibles avec d'autres langages: matlab, JAVA...
!!! ... Mais pour le python, on préfère souvent @@pickle@@
* Serialization généralisé: pour les valeurs, les objets (dont les matrices), les listes, les dictionnaires...
* Très facile à utiliser
* Utilisé par tout le monde en python... Donc à connaitre
Fonctionnement:
(:source lang=python:)
import pickle as pkl # obligatoire pour pouvoir l'utiliser
# chargement de données
data = pkl.load(file('ressources/usps_small.pkl','rb')) # attention à donner un file + option lecture (pas juste un nom de fichier)
# sauvegarde d'un dictionnaire
pkl.dump({"letters":letters, "labels":labs}, file("ressources/lettres.pkl","wb"))
(:sourceend:)
>><<
!!! @@loadtxt/savetxt@@: idéal pour MAPSI...
* Chargement/sauvegarde des matrices, format lisible de l'extérieur si besoin
* Echanges possibles avec d'autres langages: matlab, JAVA...
!!! ... Mais pour le python, on préfère souvent @@pickle@@
* Serialization généralisé: pour les valeurs, les objets (dont les matrices), les listes, les dictionnaires...
* Très facile à utiliser
* Utilisé par tout le monde en python... Donc à connaitre
Fonctionnement:
(:source lang=python:)
import pickle as pkl # obligatoire pour pouvoir l'utiliser
# chargement de données
data = pkl.load(file('ressources/usps_small.pkl','rb')) # attention à donner un file + option lecture (pas juste un nom de fichier)
# sauvegarde d'un dictionnaire
pkl.dump({"letters":letters, "labels":labs}, file("ressources/lettres.pkl","wb"))
(:sourceend:)
>><<
Added lines 1-2:
!![[Main.TutoPython|Retour vers le tutoriel complet]]
Changed line 235 from:
10.00000 0.84590 0.00000
to:
10.00000 0.84590 0.00000
Deleted line 0:
Added lines 116-134:
A = np.array([1,2,3,4,5])
A[1:3] # array([2, 3])
# On peut omettre n'importe lequel des argument dans M[start:stop:step]:
A[::] # indices de début, fin, et pas avec leurs valeurs par défaut
# array([ 1, -2, -3, 4, 5])
A[::2] # pas = 2, indices de début et de fin par défaut
# array([ 1, -3, 5])
A[:3] # les trois premiers éléments (indices 0,1,2)
# array([ 1, -2, -3])
A[3:] # à partir de l'indice 3
# array([4, 5])
# On peut utiliser des indices négatifs :
A[-1] # le dernier élément
# 5
A[-3:] # les 3 derniers éléments
# array([3, 4, 5])
Deleted line 233:
Deleted line 0:
Changed lines 38-41 from:
!!!! Affichage et monitoring
Pour l'affichage, deux solutions: taper le nom de la variable à la fin de l'exécution ou utiliser la commande @@print@@ en cours de script
Pour l'affichage, deux solutions
to:
!!! Affichage console
Pour afficher une variable @@v@@:
Pour afficher une variable @@v@@:
Changed lines 42-53 from:
print v1
print v2
# afficher plusieurs choses dans la même commande
print v1, " ", v2
(
Pour aller plus loin dans le formatage des affichages:
http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting
Pour faire le bilan des variables existant dans l'environnement actuel:
to:
print v
(:sourceend:)
Pour afficher un message formaté:
(:sourceend:)
Pour afficher un message formaté:
Changed lines 47-53 from:
(:sourceend:)
Si la syntaxe est trop lourde:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
to:
print 'toto %d' % i
Changed lines 50-51 from:
to:
Le code de formatage est le même qu'en C:
* %c : caractère
* %d : entier
* %f : réel
* %s : string
Si on ajoute un chiffre: l'affichage réserve une place (%2d : 2 caractères de réservés)\\
Si on ajoute un point: affichage tronqué des décimales (%.2f : seulement 2 chiffres après la virgule sont affichés)
Pour afficher un message formaté (très pratique pour un tableau de données):
* %c : caractère
* %d : entier
* %f : réel
* %s : string
Si on ajoute un chiffre: l'affichage réserve une place (%2d : 2 caractères de réservés)\\
Si on ajoute un point: affichage tronqué des décimales (%.2f : seulement 2 chiffres après la virgule sont affichés)
Pour afficher un message formaté (très pratique pour un tableau de données):
Changed lines 61-64 from:
matInt
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
to:
i=1
j=10
print 'toto %2d blabla' % i
print 'toto %2d blabla' % j
j=10
print 'toto %2d blabla' % i
print 'toto %2d blabla' % j
Changed lines 67-69 from:
Récupération de valeurs
to:
Donne:
toto 1 blabla
toto 10 blabla
# (sans formatage :)
toto 1 blabla
toto 10 blabla
Pour afficher plusieurs arguments il faut donner un tuple après le %:
toto 1 blabla
toto 10 blabla
# (sans formatage :)
toto 1 blabla
toto 10 blabla
Pour afficher plusieurs arguments il faut donner un tuple après le %:
Changed lines 76-84 from:
mat[0,:] # récupération de la première ligne
mat[0,0:2] # récupération des valeurs d'indice 0 et 1
# petites astuces supplémentaires
mat[0,1:] # toute la ligne sauf la première case
mat[0,:-1] # toute la ligne sauf la dernière case
mat[0,:-2] # toute la ligne sauf les deux dernières cases
to:
i=1
j=10.6758765
print 'toto %2d %5.2f blabla' % (i,j) # toto 1 10.68 blabla
j=10.6758765
print 'toto %2d %5.2f blabla' % (i,j) # toto 1 10.68 blabla
Changed lines 81-85 from:
# une matrice d'entier
mat = np
mat[0,0:
mat[0,0:2] = np.zeros
to:
Pour aller plus loin dans le formatage des affichages:
http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting
Pour faire le bilan des variables existant dans l'environnement actuel:
(:source lang=python:)
whos # ne marche que sous ipython
(:sourceend:)
Si la syntaxe est trop lourde:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting
Pour faire le bilan des variables existant dans l'environnement actuel:
(:source lang=python:)
whos # ne marche que sous ipython
(:sourceend:)
Si la syntaxe est trop lourde:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
Changed lines 96-102 from:
Syntaxe simple et intuitive (+formattage optionnel proche du C/JAVA)
to:
!!!! Astuce pour créer des matrices d'un autre type:
Changed lines 99-106 from:
# donne le fichier:
# 1.000000000000000000e+00 2
# 3.000000000000000000e+00 4.000000000000000000e+00
np.savetxt
# 1.00000,2.00000
# 3
to:
# une matrice d'entier
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
Changed lines 105-125 from:
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
to:
!!! Affectation/récupération de valeurs
Récupération de valeurs
Récupération de valeurs
Changed lines 109-117 from:
to:
# une matrice
mat = np.ones((5,6))
mat[0,0] # récupération de la première valeur
mat[0,:] # récupération de la première ligne
mat[0,0:2] # récupération des valeurs d'indice 0 et 1
# petites astuces supplémentaires
mat[0,1:] # toute la ligne sauf la première case
mat[0,:-1] # toute la ligne sauf la dernière case
mat[0,:-2] # toute la ligne sauf les deux dernières cases
mat = np.ones((5,6))
mat[0,0] # récupération de la première valeur
mat[0,:] # récupération de la première ligne
mat[0,0:2] # récupération des valeurs d'indice 0 et 1
# petites astuces supplémentaires
mat[0,1:] # toute la ligne sauf la première case
mat[0,:-1] # toute la ligne sauf la dernière case
mat[0,:-2] # toute la ligne sauf les deux dernières cases
Changed lines 120-131 from:
!!! Etat de la mémoire
(:source lang=python:)
whos # pour voir toutes les variables
# pour une variable
notes.shape #
notes.shape[1] # 2
n, m = notes.shape # retours multiples
to:
Affectation sur le même principe:
# une matrice d'entier
mat = np.ones((5,6))
mat[0,0:2] = 1 # affectation en bloc
mat[0,0:2] = np.zeros((1,2)) # affectation en bloc d'une autre matrice
# une matrice d'entier
mat = np.ones((5,6))
mat[0,0:2] = 1 # affectation en bloc
mat[0,0:2] = np.zeros((1,2)) # affectation en bloc d'une autre matrice
Changed lines 127-130 from:
!!! Concaténation
@@hstack@@ et @@vstack@@
@@hstack@@ et @@vstack@@
to:
!!! Chargement/sauvegarde de matrices de valeurs
Syntaxe simple et intuitive (+formattage optionnel proche du C/JAVA):
Changed lines 135-136 from:
m7 = np
to:
np.savetxt("random-matrix.txt", m5)
# donne le fichier:
# 1.000000000000000000e+00 2.000000000000000000e+00
# 3.000000000000000000e+00 4.000000000000000000e+00
np.savetxt("random-matrix.csv", m5, fmt='%.5f', delimiter=',')
# donne le fichier:
# 1.00000,2.00000
# 3.00000,4.00000
# donne le fichier:
# 1.000000000000000000e+00 2.000000000000000000e+00
# 3.000000000000000000e+00 4.000000000000000000e+00
np.savetxt("random-matrix.csv", m5, fmt='%.5f', delimiter=',')
# donne le fichier:
# 1.00000,2.00000
# 3.00000,4.00000
Added lines 145-192:
Saisir dans un fichier texte @@college.dat@@ les deux colonnes de nombres suivantes (vous utiliserez TextEdit, nedit, gedit, emacs ...). Ces nombres correspondent à des notes (2 épreuves) d'élèves (15) sur lesquelles nous travaillerons par la suite.
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
(:source lang=python:)
notes = np.loadtxt('college.dat')
(:sourceend:)
!!! Etat de la mémoire
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape # (15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
(:sourceend:)
!!! Concaténation
@@hstack@@ et @@vstack@@
(:source lang=python:)
m6 = np.vstack((np.array([[1, 2], [3, 4]]), np.ones((3,2))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
(:sourceend:)
Deleted lines 217-259:
!!! Affichage console
Pour afficher une variable @@v@@:
(:source lang=python:)
print v
(:sourceend:)
Pour afficher un message formaté:
(:source lang=python:)
print 'toto %d' % i
(:sourceend:)
Le code de formatage est le même qu'en C:
* %c : caractère
* %d : entier
* %f : réel
* %s : string
Si on ajoute un chiffre: l'affichage réserve une place (%2d : 2 caractères de réservés)\\
Si on ajoute un point: affichage tronqué des décimales (%.2f : seulement 2 chiffres après la virgule sont affichés)
Pour afficher un message formaté (très pratique pour un tableau de données):
(:source lang=python:)
i=1
j=10
print 'toto %2d blabla' % i
print 'toto %2d blabla' % j
(:sourceend:)
Donne:
toto 1 blabla
toto 10 blabla
# (sans formatage :)
toto 1 blabla
toto 10 blabla
Pour afficher plusieurs arguments il faut donner un tuple après le %:
(:source lang=python:)
i=1
j=10.6758765
print 'toto %2d %5.2f blabla' % (i,j) # toto 1 10.68 blabla
(:sourceend:)
Changed line 78 from:
# une matrice d'entier
to:
# une matrice
Added lines 83-86:
# petites astuces supplémentaires
mat[0,1:] # toute la ligne sauf la première case
mat[0,:-1] # toute la ligne sauf la dernière case
mat[0,:-2] # toute la ligne sauf les deux dernières cases
mat[0,1:] # toute la ligne sauf la première case
mat[0,:-1] # toute la ligne sauf la dernière case
mat[0,:-2] # toute la ligne sauf les deux dernières cases
Changed lines 13-14 from:
!!!! Création directe
to:
!!!! Création directe et à l'aide de fonctions dédiées
Added lines 24-35:
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
Deleted lines 57-74:
!!!! Création de matrices spéciales à l'aide de fonctions dédiées
Tester les fonctions ci-dessous.
(:source lang=python:)
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
(:sourceend:)
Deleted line 0:
Changed line 26 from:
!!!! Affichage at monitoring
to:
!!!! Affichage et monitoring
Added lines 1-232:
!![[Course.CourseRFIDECTutoPython|Retour vers le tutoriel complet]]
!! Gestion des entrées/sorties, déclaration des variables
Les variables sont créées automatiquement lors de leur déclaration.
Le type des variables est déterminé automatiquement.
!!! Création de variables, les approches classiques
Taper les lignes de code suivantes et visualiser les résultats.
NB : le code sera tapé dans un fichier puis le fichier sera exécuté, la console ne servira qu'à visualiser le résultat.
!!!! Création directe
(:source lang=python:)
a = 2 # variable contenant la valeur 2
m0 = np.array([[1, 2], [3, 4]]) # matrice
# matrice = vecteur de vecteurs
v1 = np.arange(0, 10, 1) # create a range
# arguments: start, stop, step
v1 = np.arange(0, 10) # with default arg
v2 = np.linspace(0, 10, 15) # avec linspace, le début et la fin SONT inclus
(:sourceend:)
!!!! Affichage at monitoring
Pour l'affichage, deux solutions: taper le nom de la variable à la fin de l'exécution ou utiliser la commande @@print@@ en cours de script
(:source lang=python:)
# comparer v1 et v2
print v1
print v2
# afficher plusieurs choses dans la même commande
print v1, " ", v2
(:sourceend:)
Pour aller plus loin dans le formatage des affichages:
http://docs.python.org/2/tutorial/inputoutput.html#fancier-output-formatting
Pour faire le bilan des variables existant dans l'environnement actuel:
(:source lang=python:)
whos # ne marche que sous ipython
(:sourceend:)
!!!! Création de matrices spéciales à l'aide de fonctions dédiées
Tester les fonctions ci-dessous.
(:source lang=python:)
m1 = np.ones((10,2)) # matrice de 1, argument = nuplet avec les dimensions
# ATTENTION np.ones(10,2) ne marche pas
m2 = np.ones((5,4)) # matrice de 0
m3 = np.eye(4) # matrice identité carrée, arg = dimension
m4 = np.random.rand(5,6) # matrice de nombres aléatoires indépendants, args = dimensions
m5 = np.random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
m6 = m5.T # pour la transposée
m5.transpose(); # ou bien
np.transpose(m5); # ou bien
(:sourceend:)
Si la syntaxe est trop lourde:
(:source lang=python:)
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
(:sourceend:)
!!!! Astuce pour créer des matrices d'un autre type:
(:source lang=python:)
# une matrice d'entier
matInt = np.zeros((5,6), int) # matrice 5x6 de 0 (entiers)
matBool = np.zeros((5,6), bool) # matrice 5x6 de False (booléens)
matBool2 = np.ones((5,6), bool) # matrice 5x6 de True (booléens)
(:sourceend:)
!!! Affectation/récupération de valeurs
Récupération de valeurs
(:source lang=python:)
# une matrice d'entier
mat = np.ones((5,6))
mat[0,0] # récupération de la première valeur
mat[0,:] # récupération de la première ligne
mat[0,0:2] # récupération des valeurs d'indice 0 et 1
(:sourceend:)
Affectation sur le même principe:
# une matrice d'entier
mat = np.ones((5,6))
mat[0,0:2] = 1 # affectation en bloc
mat[0,0:2] = np.zeros((1,2)) # affectation en bloc d'une autre matrice
(:sourceend:)
!!! Chargement/sauvegarde de matrices de valeurs
Syntaxe simple et intuitive (+formattage optionnel proche du C/JAVA):
(:source lang=python:)
np.savetxt("random-matrix.txt", m5)
# donne le fichier:
# 1.000000000000000000e+00 2.000000000000000000e+00
# 3.000000000000000000e+00 4.000000000000000000e+00
np.savetxt("random-matrix.csv", m5, fmt='%.5f', delimiter=',')
# donne le fichier:
# 1.00000,2.00000
# 3.00000,4.00000
(:sourceend:)
Saisir dans un fichier texte @@college.dat@@ les deux colonnes de nombres suivantes (vous utiliserez TextEdit, nedit, gedit, emacs ...). Ces nombres correspondent à des notes (2 épreuves) d'élèves (15) sur lesquelles nous travaillerons par la suite.
14.5 8.5
15.5 8.5
9 14.5
9.5 15.5
11 9.5
3.5 6
11.5 11
8.5 5.5
3 2
17 12
6 13
10 12.5
10 4
11.5 5.5
13.5 8
Chargement du fichier en utilisant la fonction symétrique de la fonction de sauvegarde:
(:source lang=python:)
notes = np.loadtxt('college.dat')
(:sourceend:)
!!! Etat de la mémoire
(:source lang=python:)
whos # pour voir toutes les variables, leurs types et leurs tailles
# pour une variable:
notes.shape # (15,2)
notes.shape[0] # 15
notes.shape[1] # 2
n, m = notes.shape # retours multiples
(:sourceend:)
!!! Concaténation
@@hstack@@ et @@vstack@@
(:source lang=python:)
m6 = np.vstack((np.array([[1, 2], [3, 4]]), np.ones((3,2))))
m7 = np.vstack((np.array([1, 2, 3]), np.hstack((np.ones((3,2)), np.zeros((3,1))))))
(:sourceend:)
>>block bgcolor=#ffbbbb <<
!!! Exercice de synthèse
Nous souhaitons créer une matrice 10x3 dont la première colonne contient les indices 1 à 10 dans l'ordre. La seconde colonne contiendra des nombres aléatoires entre 0 et 1. La troisième colonne ne contiendra que des 0.
Vous ajouterez ensuite une ligne en haut de la matrice contenant les indices de colonne 1 à 3.
NB: vous pouvez créer des matrices dans des matrices, c'est-à-dire faire appel à des fonctions dans les [].
>><<
Exemple de résultat possible:
1.00000 2.00000 3.00000
1.00000 0.03479 0.00000
2.00000 0.66074 0.00000
3.00000 0.15187 0.00000
4.00000 0.03640 0.00000
5.00000 0.62497 0.00000
6.00000 0.54774 0.00000
7.00000 0.68919 0.00000
8.00000 0.86146 0.00000
9.00000 0.72030 0.00000
10.00000 0.84590 0.00000
!!! Affichage console
Pour afficher une variable @@v@@:
(:source lang=python:)
print v
(:sourceend:)
Pour afficher un message formaté:
(:source lang=python:)
print 'toto %d' % i
(:sourceend:)
Le code de formatage est le même qu'en C:
* %c : caractère
* %d : entier
* %f : réel
* %s : string
Si on ajoute un chiffre: l'affichage réserve une place (%2d : 2 caractères de réservés)\\
Si on ajoute un point: affichage tronqué des décimales (%.2f : seulement 2 chiffres après la virgule sont affichés)
Pour afficher un message formaté (très pratique pour un tableau de données):
(:source lang=python:)
i=1
j=10
print 'toto %2d blabla' % i
print 'toto %2d blabla' % j
(:sourceend:)
Donne:
toto 1 blabla
toto 10 blabla
# (sans formatage :)
toto 1 blabla
toto 10 blabla
Pour afficher plusieurs arguments il faut donner un tuple après le %:
(:source lang=python:)
i=1
j=10.6758765
print 'toto %2d %5.2f blabla' % (i,j) # toto 1 10.68 blabla
(:sourceend:)