你好代码骑士,
我有一个棘手的问题,我看不出一个简单的解决办法人类的历史表明,任何事情都有一个简单的解决办法(不包括买礼物)
问题是:
我需要一个算法,它接受多维列表和一个筛选字典,对它们进行处理并根据筛选返回列表。
例如:
Bathymetry ('x', 'y')=(182, 149) #notation for (dimensions)=(size)
Chl ('time', 'z', 'y', 'x')=(4, 31, 149, 182)
filters {'x':(0,20), 'y':(3), 'z':(1,2), time:()} #no filter stands for all values
将返回:
readFrom.variables['Bathymetry'][0:21, 3]
readFrom.variables['Chl'][:, 1:3, 3, 0:21]
我在考虑尺寸的for循环,从过滤器列表中读取过滤器,但是我无法真正地将属性传递给切片机。
非常感谢您的帮助。
最佳答案
类似于以下的方法应该有效:
def doit(nam, filters):
alldims = []
for dimname in getDimNames(nam):
filt = filters.get(dimname, ())
howmany = len(filt)
if howmany == 0:
sliciflt = slice()
elif howmany == 1:
sliciflt = filt[0]
elif howmany in (2, 3):
sliciflt = slice(*filt)
else:
raise RuntimeError("%d items in slice for dim %r (%r)!"
% (howmany, dimname, nam))
alldims.append(sliciflt)
return readFrom.variables[nam][tuple(alldims)]