我正在尝试将质量控制过滤器应用于netCDF文件中的大型数据集。在netCDF中有一个称为nstorms的维度,其中有lat,lon,date和其他与每个nstorm值相关的变量(其中nstorms的范围是0到230348)。为了应用质量控制,我目前正在使用带有if和else语句的for循环:
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
lowerBound与nstorms的大小相同,因为nstorms和lowerBound都从零开始,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
设置为数组然后为包含数字0到230348的nstorms_good
创建一个新数组然后比较两个数组会更容易吗?
答案 0 :(得分: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:
...
答案 1 :(得分: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)
现在,您可以遍历两个列表并获取相应的参考。