我有一个从grib2文件中收集的结构。 xrecord.values [row,col]给出X和的值 xrecord.level给出了记录的级别 xrecords是不同级别的xrecord对象列表。
我想提高values_for_all_levels函数的性能,该函数通过每行col组合访问这些记录 扫描所有记录并获取值 values_for_all_levels函数是最耗时的函数。我想改变方法, 在字典中组合级别,X和Y值,以便我可以访问[(级别,X,Y),(级别,X,Y),...] 以row和col为组合键。所以我相信, 而不是一直使用values_for_all_levels函数 如果我能用有效的方式用行和列映射记录值,只需要1次重拨,然后使用myDict和key 我可能会获得表现。我怎样才能实现这种映射?任何帮助将不胜感激。
class myClass(object):
levels = [x.level for x in self.xrecords]
for xy_comb, data in self.iterator():
do_something()
def iterator(self, ixrows=None, ixcols=None):
rows = ixrows or xrange(self.all_rows())
cols = ixcols or xrange(self.all_cols())
return (self.point_at_index(row, col) for row in rows for col in cols)
def point_at_index(self, row, col):
x_vals = self.values_for_all_levels(row, col, self.xrecords)
y_vals = self.values_for_all_levels(row, col, self.yrecords)
xx = self.xxlist[row, col]
yy = self.yylist[row, col]
return (xx, yy), zip(self.levels, x_vals, y_vals)
def values_for_all_levels(self, i, j, records):
return [r.values[i, j] for r in records]