提问人:Gemstone 提问时间:5/4/2023 最后编辑:TimusGemstone 更新时间:5/5/2023 访问量:64
Python 中四个嵌套循环的效率方式
The efficiency way of four nested loops in Python
问:
我在python中有四个嵌套循环。
data = {'alt' : talt,
'lat' : tlat,
'lon' : tlon,
'LT' : tpLT,
'temp': temp}
data = pd.DataFrame(data)
gap_alt = 10.
int_alt = np.arange(30, 111, gap_alt)
lat_rng = np.arange(-55, 55.1, 10)
lon_rng = np.arange(0, 360.1, 30)
temp_all = np.full([len(lon_rng)-1, len(lat_rng)-1, len(int_alt), 24], np.nan)
在这里,我有包含海拔、纬度、经度、当地时间和温度的数据(数据帧)。
数据是一维的(data),我想把这个数组变成四维数组(temp_all)。
for loop_lat in lat_grid:
for loop_lon in lon_grid:
for loop_ht in height_grid:
for loop_hr in hour_grid:
idx = [(data.lat >= lat_rng[loop_lat]) & (data.lat < lat_rng[loop_lat+1]) &
(data.lon >= lon_rng[loop_lon]) & (data.lon < lon_rng[loop_lon + 1]) &
(data.LT >= loop_hr) & (data.LT < loop_hr+1) &
(data.alt >= int_alt[loop_ht]-gap_alt/2.) & (data.alt < int_alt[loop_ht]+gap_alt/2)][0]
temp0[loop_lon, loop_lat, loop_ht, loop_hr] = np.mean(temp[idx])
在这个过程中,花费的时间太长了...... 有什么有效的方法吗?
Python 中四个嵌套循环的效率方式
答:
1赞
Tim Roberts
5/5/2023
#1
我所说的注释的意思是,将表达式的不变部分移出最里面的循环。这可能只是速度的微小改进。您真正需要的是一种不同的方法,因此您不必每次都搜索。data
for loop_lat in lat_grid:
lats = (lat_rng[loop_lat] <= data.dat) & (data.lat < lat_rng[loop_lat+1])
for loop_lon in lon_grid:
lons = (lon_rng[loop_lon] <= data.lon) & (data.lon < lon_rng[loop_lon+1])
for loop_ht in height_grid:
hts = (int_alt[loop_ht]-gap_alt/2 <= data.alt) & (data.alt < int_alt[loop_ht]+gap_alt/2)]
for loop_hr in hour_grid:
hrs = (loop_hr <= data.LT) & (data.LT < loop_hr+1)
idx = lats & lons * hts & hrs
temp0[loop_lon, loop_lat, loop_ht, loop_hr] = np.mean(temp[idx])
评论