Bonjour,
J'ai un soucis suite a la conversion d'un script java en python en effet, il y a un passage nécessitant quartes boucles for imbriquées afin de parcourir la matrice d'une image 200x250px par bloc carré de 35x35px. Le bloc carré est chaque fois déplacé d'un pixel vers la droite puis arrivé au dernier bloc pouvant rentrer dans les 250px de l'image de base, il descend d'un pixel, et ainsi dessuite jusqu'à se retrouver tout en bas à droite.

En java, cela s'exécute en même pas 1 seconde, et en python, cela prend plusieurs minutes!

Existe il un moyen d'optimiser le script pour gagner de la vitesse?


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
>>> print Size
[[ 250.  200.]
 [  35.   35.]
 [  35.   35.]]
>>> 
 
 
def COUNT():
    Res = zeros((Size[0,1],Size[0,0]))
    CountRet1, CountRet2 = 0, 0
    for x in range(0,Size[0,1]-Size[1,1],1): #Pour chaque Pattern pouvant entrer en hauteur
        print "Ligne ", x+1 ,"/",Size[0,1]-Size[1,1]
        for y in range(0,Size[0,0]-Size[1,0],1): # Pour chaque Pattern pouvant entrer en largeur
            #--< Parcours global de l'image avec les deux rétines
            for r in range (0,2,1):#--< Retine 1 puis 2
                Sum = 0
                for a in range(0,Size[1,1],1):
                    for b in range(0,Size[1,0],1):
                        if Res[a+x,b+y] != 1:
                            Sum += Weight[a,b,r] * Map[a+x,b+y]
                if Sum > Threshold:
                    if r == 0:
                        CountRet1 += 1
                        rect = canvas.create_rectangle(y,x,y+Size[1,1],x+Size[1,0], width=2, outline="blue")
                    elif r == 1:
                        CountRet2 += 1
                        rect = canvas.create_rectangle(y,x,y+Size[1,1],x+Size[1,0], width=2, outline="red")
                    for a in range(0,Size[1,1],1):
                        for b in range (0,Size[1,0],1):
                            Res[a+x,b+y] = 1
    print "Nb Pattern_1 :",CountRet1
    print "Nb Pattern_2 :",CountRet2
Merci!