在 pytable 中组合 read_sorted 和 Expr 的最节省内存的方法是什么?



我正在寻找最节省内存的方法,以排序顺序读取 Pytables 表(列:x,y,z)(z 列具有 CSI)并计算类似

x+a*y+b*z

其中 a 和 b 是常数。到目前为止,我唯一的解决方案是使用"sortyby=z"标志复制整个表,然后在表上逐块计算表达式。

注意:我想将结果 x+a*y+b*z 保留在内存中,以对其执行一些在 Pytables 中不可用的归约操作,然后将其保存到新的 Pytables 表中。

有两个基本选项,具体取决于是否需要以排序方式进行迭代。

如果需要遍历排序表中的表,则读取将比计算表达式昂贵得多。 因此,您应该使用 Table.read_sorted() 有效地读取并在列表推导或类似中计算此表达式:

a = [row['x']+a*row['y']+b*row['z'] for row in 
     tab.read_sorted('z', checkCSI=True)]

如果不需要以排序方式进行迭代(看起来不像这样),则应使用 Expr 类设置和计算表达式,从列中读取 CSI,并将其应用于表达式结果。 这看起来像这样:

x = tab.cols.x
y = tab.cols.y
z = tab.cols.z
expr = tb.Expr('x+a*y+b*z')
unsorted_res = expr.eval()
idx = z.read_indices()
sorted_res = unsored_res[idx]

相关内容

  • 没有找到相关文章

最新更新