任务:移动物体每秒测量一些参数,应与每10分钟测量的十个静止物体的测量结果进行比较。
条件:移动物体应位于距其中一个静止物体100米的范围内,并且在移动和静止测量之间的时间差为±5分钟,以便能够比较参数。
列表: time_m,time_s,lon_m,lat_m,lon_s,lat_s,param1_m,param1_s,param2_m,param2_s等(m表示移动,s表示静止(来自10个静止物体的所有测量值)在同一个列表中))
问题:由于列表大约有10 ^ 5个测量值,因此我的解决方案包含两个for循环和两个if语句需要太长时间。拜托,你能帮助我以更好的方式解决这个问题吗?
我的解决方案:
dt_m = [datetime.datetime.strptime(item, '%Y-%m-%dT%H:%M:%S') for item in time_m]
dt_s = [datetime.datetime.strptime(item, '%Y-%m-%dT%H:%M:%S') for item in time_s]
d = datetime.timedelta(minutes=5)
lon_hundred_m = 0.00180 #lon degrees for 100 m at lat 60
lat_hundred_m = 0.00090 #lat degrees for 100 m
for i in range(len(lon_m)):
for j in range(len(lon_s)):
if lon_m[i] >= (lon_s[j]-lon_hundred) and lon_m[i] <= (lon_s[j]+lon_hundred) and lat_m[i] >= (lat_s[j]-lon_hundred) and lat_m[i] <= (lat_s[j]+lon_hundred):
if dt_s[j] >= dt_m[i]-d and dt_s[j] <= dt_m[i]+d:
time_m_2.append(time_m[i])
param1_m_2.append(param1_m[i])
param2_m_2.append(param2_m[i])
lon_m_2.append(lon_m[i])
lat_m_2.append(lat_m[i])
time_s_2.append(time_s[j])
param1_s_2.append(param1_s[j])
param2_s_2.append(param2_s[j])
lon_s_2.append(lon_s[j])
lat_s_2.append(lat_s[j])
谢谢!