Main

Main.TutoPythonIO History

Hide minor edits - Show changes to output

October 08, 2018, at 11:12 AM EST by 132.227.202.156 -
Added line 115:
(:source lang=python:)
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)
June 23, 2017, at 04:08 PM EST by 132.227.202.156 -
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
June 23, 2017, at 04:08 PM EST by 132.227.202.156 -
Changed lines 1-2 from:
%define=exo color=red%
%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
June 23, 2017, at 04:07 PM EST by 132.227.202.156 -
Changed lines 181-204 from:
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:)

to:

Deleted lines 204-206:
Après avoie recharger @@"ressources/lettres.pkl"@@ dans une variable @@result@@, on accède aux champs en faisant:
* @@result.letters@@ et @@result.labs@@

Changed lines 208-211 from:
>>block bgcolor=#ffbbbb <<


to:

!!!! Génération de données

Changed lines 217-218 from:
>><<
to:

Changed lines 231-260 from:
   10.00000    0.84590    0.00000
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@@
June 23, 2017, at 04:00 PM EST by 132.227.202.156 -
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:)
June 23, 2017, at 03:58 PM EST by 132.227.202.156 -
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:
!!! Exercice de synthèse
to:
June 23, 2017, at 03:56 PM EST by 132.227.202.156 -
Changed lines 52-56 from:


!!!%part% Affichage console

Pour afficher une variable @@v@@
:
to:
!!!! Astuce pour créer des matrices d'un autre type:
Changed lines 55-58 from:
print(v1) # parenthèses obligatoires en python 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)
Changed lines 61-63 from:
Pour afficher un message formaté:
to:
!!!%part% Affichage console

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:)

Changed lines 85-92 from:
!!!! 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:)
to:
June 23, 2017, at 03:56 PM EST by 132.227.202.156 -
Changed lines 42-44 from:
!!!%part% Affichage console

Pour afficher une variable
@@v@@:
to:

!!!! Concaténation de matrices

@@hstack@@ et @@vstack@@
Changed lines 48-49 from:
print(v1) # parenthèses obligatoires en python 3
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))))))
Changed lines 52-56 from:
Pour afficher un message formaté:
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:)

Changed lines 70-71 from:
Pour faire le bilan des variables existant dans l'environnement actuel:
to:


Si la syntaxe est trop lourde
:
Deleted lines 73-77:
 whos # ne marche que sous ipython
(: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
:
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:)
Deleted lines 238-258:
!!! 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:)
June 23, 2017, at 03:53 PM EST by 132.227.202.156 -
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
June 23, 2017, at 03:52 PM EST by 132.227.202.156 -
Added lines 1-4:
%define=exo color=red%
%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 
June 23, 2017, at 11:52 AM EST by 132.227.202.156 -
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]]
June 23, 2017, at 11:50 AM EST by 132.227.202.156 -
Added lines 122-127:
m2 = m
m2[0][0] = 5
print(m)
# Affichage
# [[5 2]
#  [3 4]]
June 23, 2017, at 11:49 AM EST by 132.227.202.156 -
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:)
June 23, 2017, at 11:06 AM EST by 132.227.202.156 -
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:
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 %:
to:
Pour faire le bilan des variables existant dans l'environnement actuel:
Deleted lines 56-66:
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:)
Changed lines 62-63 from:
 from numpy import random
 m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
to:
from numpy import random
m5 = random.randn(5,6) # tirages selon une gaussienne(mu=0,var=1), args = dimensions
June 23, 2017, at 11:04 AM EST by 132.227.202.156 -
Changed line 47 from:
print 'toto %d' % i
to:
print("{} : {}".format("la valeur est ", m5[0][0]))
Changed lines 50-65 from:
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:)
to:
Pour toutes les règles de formatage avancé : [[https://pyformat.info|lien]]
''' Ne pas tester en TME {$\Rightarrow$} à la maison
'''
June 23, 2017, at 10:58 AM EST by 132.227.202.156 -
Changed line 42 from:
print(v) # parenthèses obligatoires en python 3
to:
print(v1) # parenthèses obligatoires en python 3
June 23, 2017, at 10:55 AM EST by 132.227.202.156 -
Changed line 42 from:
print v
to:
print(v) # parenthèses obligatoires en python 3
June 23, 2017, at 10:43 AM EST by 132.227.202.156 -
Changed line 27 from:
m2 = np.ones((5,4))  # matrice de 0
to:
m2 = np.zeros((5,4))  # matrice de 0
June 23, 2017, at 10:42 AM EST by 132.227.202.156 -
Changed lines 16-35 from:
 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
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
June 23, 2017, at 10:40 AM EST by 132.227.202.156 -
June 23, 2017, at 10:23 AM EST by 132.227.202.156 -
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:)

>><<
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:
!![[Course.CourseRFIDECTutoPython|Retour vers le tutoriel complet]]
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
to:
!!! Affichage console

Pour afficher une variable @@v@@
:
Changed lines 42-53 from:
 # 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:

to:
print v
(:sourceend:)

Pour afficher un message formaté
:
Changed lines 47-53 from:
 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
to:
print 'toto %d' % i
Changed lines 50-51 from:
!!!! Astuce pour créer des matrices d'un autre type:
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):
Changed lines 61-64 from:
# 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)
to:
i=1
j=10
print 'toto %2d blabla
' % i
print 'toto %2d blabla' % j
Changed lines 67-69 from:
!!! Affectation/récupération de valeurs

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 %:
Changed lines 76-84 from:
# 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
to:
i=1
j=10.6758765
print 'toto %2d %5.2f blabla' %
(i,j) # toto  1 10.68 blabla
Changed lines 81-85 from:
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
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
Changed lines 96-102 from:


!!! Chargement/sauvegarde de matrices de valeurs


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:
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
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)
Changed lines 105-125 from:

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:

to:
!!! Affectation/récupération de valeurs

Récupération de valeurs
Changed lines 109-117 from:
notes = np.loadtxt('college.dat')
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
Changed lines 120-131 from:

!!! 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
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
Changed lines 127-130 from:
!!! Concaténation

@@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:
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))))))
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
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
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:)