如何改进行和列的处理

时间:2015-01-21 15:53:16

标签: python python-2.7

我有一个从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]

0 个答案:

没有答案