我正在尝试使用python中的Haversine公式并置2个不同分辨率的数据集。
此循环使用Haversine公式花费太多时间来计算距离。为了减少不必要的并置2个非常远的数据点,我给了一个条件,使其跳到下一个网格点
for i in range(len(lati1)):
for j in range (len(long1)):
for x in range(len(lati2)):
for y in range(len(long2)):
lat1 = radians(lati1[i])
lon1 = radians(long1[j])
lat2 = radians(lati2[x])
lon2 = radians(long2[y])
temp[0][i][j]
dlat = lat2 - lat1
dlon = lon2 - lon1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
distance = R * c
print distance
if ( distance <= 3.5):
print distance, lati1[i], long1[j],lati2[x], long2[y], temp[i][j], preci[x][y]
writer.writelines("\r")
writer.writelines( (' ').join([distance, lati1[i], long1[j], temp[i][j], preci[x][y]]))
elif (distance < 5.0):
break
break
j=j+1
长时间运行此程序后,它显示如下
572
572
3.2412380942 0.13999939 60.100006 0.125 60.125 287.77 0.0
Traceback (most recent call last):
File "<ipython-input-36-ac8328bf9abd>", line 40, in <module>
writer.writelines( (' ').join([distance, btlat[i], btlon[j], btlat[0,i,j], predata[x,y]]))
File "/home/krishna/.local/lib/python2.7/site-packages/numpy/ma/core.py", line 3174, in __getitem__
dout = self.data[indx]
IndexError: too many indices for array
〜我可以更改数组索引,但是还有更好的解决方案吗? 搭配?
您可以帮我解决这个问题吗? 谢谢