Teaching - RFIDEC


RFIDEC

Examen de milieu de semestre:

Voir la page de C. Gonzales:

http://webia.lip6.fr/~gonzales/teaching/rfidec/index.php

Examen de fin de semestre:

  • Droit aux notes de cours et aux slides
  • Le programme commence aux cours de P. Gallinari.
  • Les slides sont sur la page de P. Gallinari ainsi que l'exam corrigé de l'an dernier.

http://www-connex.lip6.fr/~gallinar/Enseignement/Enseignement.html

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

 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

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

 # comparer v1 et v2
 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:

 whos # ne marche que sous ipython

Création de matrices spéciales à l'aide de fonctions dédiées

Tester les fonctions ci-dessous.

 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
 

Si la syntaxe est trop lourde:

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

Affectation sur le même principe:

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

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

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

Concaténation

hstack et vstack

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

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:

print v

Pour afficher un message formaté:

print 'toto %d' % i

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

i=1
j=10
print 'toto %2d blabla' % i
print 'toto %2d blabla' % j

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