2011-05-09 104 views
3

我有一套{(i,j):NumPy.array}的字典k,我想循環使用NumPy.arrays進行某種評估。{元組:NumPy.array}循環字典

我做了dictionarries如下:

datarr = ['PowUse', 'PowHea', 'PowSol', 'Top'] 
for i in range(len(dat)): exec(datarr[i]+'={}') 

,所以我可以通過量變到質變的字符串原始列表隨時更改組數據我想在更大的代碼集來評估。不過,這意味着我必須撥打我的字典eval(k) for k in datarr

結果,環路我想要做的是這樣的時刻:

for i in filarr: 
    for j in buiarr: 
     for l in datarrdif: 
      a = eval(l)[(i, j)] 
      a[abs(a)<.01] = float('NaN') 
      eval(l).update({(i, j):a}) 

,但有沒有寫這一個好得多的辦法嗎?我試着以下,但這並沒有工作:

[eval(l)[(i, j)][abs(eval(l)[(i, j)])<.01 for i in filarr for j in buiarr for k in datarrdiff] = float('NaN')` 

THX提前

回答

4
datarr = ['PowUse', 'PowHea', 'PowSol', 'Top'] 
for i in range(len(dat)): exec(datarr[i]+'={}') 

你爲什麼不創建爲字典詞典?

datarr = ['PowUse', 'PowHea', 'PowSol', 'Top'] 
data = dict((name, {}) for name in datarr) 

然後你可以避免所有的eval()

for i in filarr: 
    for j in buiarr: 
     for l in datarr: 
      a = data[l][(i, j)] 
      np.putmask(a, np.abs(a)<.01, np.nan) 
      data[l].update({(i, j):a}) 

或可能只是:

for arr in data.itervalues(): 
    np.putmask(arr, np.abs(arr)<.01, np.nan) 
如果要設置好 abs(element) < .01爲NaN所有字典值的所有元素

+0

@eurniro:精湛,這確實就是我所需要的,無論是製作字典詞典的想法,還是使用np.putmask(...)! – 2011-05-09 08:19:47