2011-05-09 102 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