Étant donné que je suis novice en matière de Numpy, je rencontre des problèmes pour mettre en œuvre un code particulier que j'ai écrit en C++.
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
val=0;
for(i1=-size;i1<=size;i1++)
{
for(j1=-size;j1<=size;j1++)
{
h1=i+i1,w1=j+j1;
if (w1<=0) w1=w1+w;
if (h1<=0) h1=h1+h;
if (w1>=w) w1=w1-w;
if (h1>=h) h1=h1-h;
val=val+sqrt(pow(data[i][j][0]-data[h1][w1][0],2)
+pow(data[i][j][1]-data[h1][w1][1],2)
+pow(data[i][j][2]-data[h1][w1][2],2));
}
}
}
}
Comme vous pouvez le voir, j'ajoute la distance euclidienne pour l'élément [i,j] à chaque élément faisant partie de la sous-matrice [i-taille à i+taille][j-taille à j+taille].
comment puis-je écrire le code en python sans avoir à utiliser des boucles pour effectuer une opération pour chaque élément du tableau numpy qui dépend de ses positions en ligne et en colonne. Ou bien il doit y avoir un moyen de l'optimiser.
Voici ma mise en œuvre actuelle qui est TRES TRES LENTE
for i in range(0,h):
for j in range(0,w):
for i1 in range(-window_size, window_size+1):
for j1 in range(-window_size, window_size+1):
h1=i+i1
w1=j+j1
if w1 <= 0:
w1+=w
if h1 <= 0:
h1+=h
if w1 >= w:
w1-=w
if h1 >= h:
h1-=h
val[i][j] += np.sqrt(((source_pyr_down_3_Luv[i][j][0] - source_pyr_down_3_Luv[h1][w1][0])**2)
+((source_pyr_down_3_Luv[i][j][1] - source_pyr_down_3_Luv[h1][w1][1])**2)
+((source_pyr_down_3_Luv[i][j][2] - source_pyr_down_3_Luv[h1][w1][2])**2))
Il a fallu presque 6 minutes pour exécuter ce code.