私は Numpy が初めてなので、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));
}
}
}
}
ご覧のとおり、基本的に [i,j] 要素のユークリッド距離を、部分行列 [i-size から i+size][j-size から j+size] の一部であるすべての要素に追加しています。
行と列の位置に依存する numpy 配列の各要素に対して何らかの操作を実行するためにループを使用することなく、python でコードを記述するにはどうすればよいですか。または、それを最適化する何らかの方法が必要です。
これは、非常に遅いような私の現在の実装です
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))
このコードを実行するのに約 6 分かかりました。