我對遍歷多個文件的NetCDF(大〜28G)代碼工作。 netcdf文件在整個域中具有多個4D變量[時間,東西,南北,高度]。目標是循環這些文件並遍歷域中所有這些變量的每個位置,並將某些變量存儲到一個大型數組中。當缺少或不完整的文件時,我用99.99填充值。現在我只是通過循環測試每日2個netcdf文件進行測試,但由於某種原因,它正在永久(〜14小時)。我不確定是否有方法來優化此代碼。我不認爲python應該花這麼長時間來完成這個任務,但也許這是python或我的代碼的問題。下面是我的代碼希望它是可讀的,如何使這個更快的任何建議是極大的讚賞:我怎樣才能讓我的Python代碼的運行速度
#Domain to loop over
k_space = np.arange(0,37)
j_space = np.arange(80,170)
i_space = np.arange(200,307)
predictors_wrf=[]
names_wrf=[]
counter = 0
cdate = start_date
while cdate <= end_date:
if cdate.month not in month_keep:
cdate+=inc
continue
yy = cdate.strftime('%Y')
mm = cdate.strftime('%m')
dd = cdate.strftime('%d')
filename = wrf_path+'\wrfoutRED_d01_'+yy+'-'+mm+'-'+dd+'_'+hour_str+'_00_00'
for i in i_space:
for j in j_space:
for k in k_space:
if os.path.isfile(filename):
f = nc.Dataset(filename,'r')
times = f.variables['Times'][1:]
num_lines = times.shape[0]
if num_lines == 144:
u = f.variables['U'][1:,k,j,i]
v = f.variables['V'][1:,k,j,i]
wspd = np.sqrt(u**2.+v**2.)
w = f.variables['W'][1:,k,j,i]
p = f.variables['P'][1:,k,j,i]
t = f.variables['T'][1:,k,j,i]
if num_lines < 144:
print "partial files for WRF: "+ filename
u = np.ones((144,))*99.99
v = np.ones((144,))*99.99
wspd = np.ones((144,))*99.99
w = np.ones((144,))*99.99
p = np.ones((144,))*99.99
t = np.ones((144,))*99.99
else:
u = np.ones((144,))*99.99
v = np.ones((144,))*99.99
wspd = np.ones((144,))*99.99
w = np.ones((144,))*99.99
p = np.ones((144,))*99.99
t = np.ones((144,))*99.99
counter=counter+1
predictors_wrf.append(u)
predictors_wrf.append(v)
predictors_wrf.append(wspd)
predictors_wrf.append(w)
predictors_wrf.append(p)
predictors_wrf.append(t)
u_names = 'u_'+str(k)+'_'+str(j)+'_'+str(i)
v_names = 'v_'+str(k)+'_'+str(j)+'_'+str(i)
wspd_names = 'wspd_'+str(k)+'_'+str(j)+'_'+str(i)
w_names = 'w_'+str(k)+'_'+str(j)+'_'+str(i)
p_names = 'p_'+str(k)+'_'+str(j)+'_'+str(i)
t_names = 't_'+str(k)+'_'+str(j)+'_'+str(i)
names_wrf.append(u_names)
names_wrf.append(v_names)
names_wrf.append(wspd_names)
names_wrf.append(w_names)
names_wrf.append(p_names)
names_wrf.append(t_names)
cdate+=inc
可以使用多在同一時間處理的文件。安排K,J,我對空間不同的工藝,讓他們每個人做自己的任務 – haifzhan
什麼是'nc.Dataset'?另外,在你提高速度之前,你需要知道爲什麼它很慢。您需要分析您的代碼並*測量*。 –
這是我NetCDF文件中讀取如何使用Python我有一份聲明早些時候在這裏沒有顯示的代碼:進口netCDF4數控 – HM14