[英]Python Dictionary Comprehension Loop
因此,我已經開始理解業務,但是我想知道是否有比每個索引都有單獨的循環更快的方法 。
dR是從netCDF文件加載的一堆信息,而dN正在准備自己作為內插的副本。
dN = { 'lev' : { i : dR['lev'][i] * 3.370079 for i in range(len(dR['lev'])) },
'wdi' : { i : dR['wdi'][i,::,1,1] for i in range(len(dR['tim'])) for o in range(len(dI['lev'])) },
'wsp' : { i : dR['wsp'][i,::,1,1] * 1.94384449 for i in range(len(dR['tim'])) for o in range(len(dI['lev'])) },
'u' : { i : dR['u'][i,::,1,1] * 1.94384449 for i in range(len(dR['tim'])) for o in range(len(dI['lev'])) },
'v' : { i : dR['v'][i,::,1,1] * 1.94384449 for i in range(len(dR['tim'])) for o in range(len(dI['lev'])) },
'tim' : dR['tim'][::3],
'lon' : dR['lon'][::].tolist(),
'lat' : dR['lat'][::].tolist()}
編輯:所以我把一堆索引放在一起,像這樣的循環:
dN = { 'lev' : dR['lev'][::] * 3.370079,
'wdi' : {},
'wsp' : {},
'u' : {},
'v' : {},
'tim' : dR['tim'][::3],
'lon' : dR['lon'][::].tolist(),
'lat' : dR['lat'][::].tolist()}
for i in range( len(dN['tim']) ):
dN['lev'][i] = dR['lev'][i,::,1,1] * 3.370079
for o in range( len(dI['lev']) ):
dN['wsp'][i] = dR['wsp'][i,::,1,1] * 1.94384449
dN['wdi'][i] = dR['wdi'][i,::,1,1] * 1.94384449
dN['u'][i] = dR['u'][i,::,1,1] * 1.94384449
dN['v'][i] = dR['v'][i,::,1,1] * 1.94384449
但是我想知道是否還有一個更快的方法,我發現必須聲明每個主要索引然后在其后手動應用它們有點愚蠢。
我從您的代碼中看到dN ['wsp'],dN ['u']和dN ['v']完全相同。 一個明顯的改進是只構建了一次該字典並進行了復制(如果對應用程序更有意義,則可以進行深度復制)。 但這與理解如何工作無關,這只是一種很好的編程技術。 您是否要提出更具針對性的問題?
我還認為,很難在長字典聲明語句中包含字典理解。
您正在使用:
dR[someindex][i,::,1,1] * somefactor for i in range(len(dR['tim'])) for o in range(len(dI['lev']))
其中某因子為1或1.94384449
總共4次,因此如果不使用乘法器就首先生成該字典一次,則可能會大大提高速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.