gpt4 book ai didi

python - Numpy:循环替代,优化

转载 作者:行者123 更新时间:2023-11-28 22:00:54 25 4
gpt4 key购买 nike

由于我是 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] 的一部分

我如何在 python 中编写代码,而不必使用循环对 numpy 数组中依赖于其行和列位置的每个元素执行某些操作。或者必须有一些优化它的方法。

这是我目前的实现,非常非常慢

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 分钟。

最佳答案

访问子数组 im numpy 尝试:

data[i-size:i+size,j-size:j+size]

编辑此子数组(在本例中为每个元素简单 +1):

data[i-size:i+size,j-size:j+size] += 1

或获取另一个数组,其中包含 2 个数组(形状为 (n,2))的元素之间的距离:

data3 = np.sqrt(np.power(data1[:,0]-data2[:,0],2)+ np.power(data1[:,1]-data2[:,1],2))

我知道这不是一个完整的答案,但我希望它能帮助您入门。

关于python - Numpy:循环替代,优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com