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

Boucles et conditions

Syntaxe explicite

La syntaxe est la suivante: pas d'accolade, pas de syntaxe ouvrante/fermante seulement de l'INDENTATION

Exemple simple sur un vecteur

v = np.arange(0,10) # [0, ... , 9]
for i in v:         # pour i allant de 0 à 9
    print i," ", i*2

Exemple avancé sur une matrice (ie un vecteur de vecteur)

m1=np.random.rand(4,5)
for row in m1:      # pour chaque ligne de m1
                    # row est donc une ligne = array 1D
    print "row", row

    for element in row:
        print element

Boucles imbriquées dans la création d'objet:

a = np.array([n for n in range(10)])
a2 = np.array([[n+m for n in range(10)] for m in range(5)])

Le while existe également:

i=10
while i>0:
    print i
    i -= 1
# 10 9 8... 1 (un chiffre par ligne)

La syntaxe du IF est la suivante:

i=0
if i<30:
    i = i + 10;
    print "i est inferieur a trente"
else:                                 # le else est optionnel
    print "i est superieur a trente"

Pour les tests multiples, il existe une commande très pratique: elif

i=0
if i==1:
    print "cas 1"
elif i==2:
    print "cas 2"

Opérateurs logiques

Pour les clauses plus complexes, voici la liste des opérateurs logiques:

Opérations booléennes en anglais and, not, or

True and False
# False
not False
# True
True or False
# True

Comparisons >, <, >= (plus grand ou égal), <= (inférieur ou égal), == equalité, != différent

Très classique...

Egalité référentielle entre objet

# objets identiques?
l1 = l2 = [1,2]
# ou bien
l1 = [1,2]
l2 = l1

print l1 is l2 # True

# ou bien
l1 = [1,2]
l2 = [1,2]

print l1 is l2 # False

Syntaxe MAP (application d'une fonction sur un vecteur)

1. Définition d'une fonction:

def theta(x):           # signature classique (cf partie suivante)
    """                  
    Scalar implemenation of the Heaviside step function.
    """

    if x >= 0:
        return 1
    else:
        return 0

2. Vectorisation

Par défaut, on ne peut pas appliquer une fonction sur un vecteur

# theta(np.array([-3,-2,-1,0,1,2,3]))   # -> ERREUR

theta_vec = np.vectorize(theta)         # notation fonctionnelle (fonction sur des fonctions)
theta_vec(np.array([-3,-2,-1,0,1,2,3])) # OK !
                                        # array([0, 0, 0, 1, 1, 1, 1])

Application des boucles et conditionnelles

Générer une matrice M 10x10 avec les caractéristiques suivantes (i désigne les lignes et j les colonnes):

  • si (i+j) pair alors M(i,j) est un nombre aléatoire pair tiré entre 0 et 100
  • si (i+j) impair alors M(i,j) = i+j

NB: l'opérateur modulo est % (comme en C/JAVA)

SOLUTION 1 avec des boucles

SOLUTION 2:

  1. création de la matrice contenant les i+j
  2. application d'une fonction de transformation