2014-02-28 23 views
0

我試圖從netCDF文件中應用質量控制過濾器到大型數據集。在netCDF中有一個稱爲nstorms的維度,其中有與每個nstorm值相關的lat,lon,date和其他變量(其中nstorms範圍從0到230348)。爲了應用的質量控制我目前使用的for循環使用if和else語句:使用else語句定義變量和數組 - Python

for i in range(len(lowerBound)): 
    if min37[i] >= lowerBound[i] and min37[i] < upperBound[i]: 
    nstorms_bad = i 
    print nstorms_bad 
    else: 
    nstorms_good = #everything else - all the other 'i' values 
    print nstorms_good 
    #Put values for nstorms_good into an array 

下界是大小相同的nstorms以來都nstorms和下界從零開始爲nstorms_bad = i返回的值匹配netCDF中的壞數據(即,爲nstorms_bad返回的前幾個值是306,408,486,並且這些值匹配與netCDF文件中的nstorms 306,408和486相關的錯誤數據)。

我遇到的問題是我需要良好的nstorms值,我需要將它們放入一個數組中,以便我可以返回到netCDF文件並將nstorms_good的每個值與其各自的變量數據(lat, lon,時間等)。如果我設置了nstorms_good = i,那麼我只是得到所有i值的列表,沒有應用任何質量控制?定義nstorms_good的最好方法是什麼,以便它包含所有i值,除了那些不好的值(因爲使用i與實際nstorms相匹配)以及如何將所有這些值都放入數組中?將nstorms_bad設置爲一個數組,然後爲nstorms_good創建一個包含數字0到230348的新數組,然後比較這兩個數組會更容易嗎?

回答

1

看起來您需要稍後遍歷所有nstorms_good。因此,任何容器都可以:list,dict甚至set

使用dict將允許你存儲每個nstorms_good一些額外的數據,但因爲你真的只需要指數,我會用列表,請:

nstorms_good = [] 
for i in range(len(lowerBound)): 
    if min37[i] >= lowerBound[i] and min37[i] < upperBound[i]: 
    ... 
    else: 
    nstorms_good.append(i) 

# process 
for nstorm in nstorms_good: 
    ... 
+0

謝謝!這很好! – mbreezy

0

你似乎想要的是兩個列表,其中一個列表中的所有索引都與暴風雨數據列表中的壞風暴相關聯,其中一個與good_storms相關。這將會像

god = [] 
bad = [] 
for i in range(len(lowerBound): 
    if min37[i] >= lowerBound[i] and min37[i] < upperBound: 
    bad.append(i) 
    else: 
    good.append(i) 

您現在可以遍歷兩個列表並獲取相應的引用。

+0

謝謝!這絕對有幫助! – mbreezy