我一直试图找出在对图像进行一些分析时如何避免执行2次循环的方法。它是正方形图像(x和y中的尺寸相同)。当前的方法是针对每个像素设置其在数组“ stars”中的位置,第一个坐标是x位置,第二个坐标是y位置,第三个坐标是像素的亮度。我知道必须有一种非常优越的方法来进行设置,但是当i = j时,我尝试的每件事都可以正常工作(基本上只给我该矩阵的对角线)。我该如何做得更好?!
def firstmoment(stars,bins):
xsum=0.0
ysum=0.0
itot=0.0
for i in range(0, bins):
for j in range(0, bins):
xsum=xsum+stars[i][j][0]*stars[i][j][2]
ysum=ysum+stars[i][j][1]*stars[i][j][2]
itot=itot+stars[i][j][2]
x0=xsum/itot
y0=ysum/itot
return x0, y0, itot
答案 0 :(得分:1)
让我们只关注x
部分,忽略y
,因为它的工作方式相同。
def firstmoment(stars, bins):
xsum = 0.0
itot = 0.0
for i in range(bins):
for j in range(bins):
xsum += stars[i][j][0] * stars[i][j][2]
itot += stars[i][j][2]
x0 = xsum / itot
return x0, itot
stars
是索引为[x, y, luminance]
的3D数组。最后,itot
是亮度值之和,通常为stars[:bins,:bins,2].sum()
。对xsum
使用类似的转换,我们得到:
def firstmoment(stars, bins):
xsum = (stars[:bins,:bins,0] * stars[:bins,:bins,2]).sum()
itot = stars[:bins,:bins,2].sum()
x0 = xsum / itot
return x0, itot