python - 在 pytables 中组合 read_sorted 和 Expr 的最有效内存方式是什么?

标签 python pytables numexpr

我正在寻找最有效的内存方式来结合按排序顺序读取 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 class 设置和计算表达式, read in the CSI from the column ,并将其应用于表达式结果。这看起来像:

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]

关于python - 在 pytables 中组合 read_sorted 和 Expr 的最有效内存方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21750690/

相关文章:

python - 执行坐标系转换的库?

python - 从pytables中的多个表中选择数据

python - 使用 NumExpr : An analysis 提高 NumPy 代码的运行时间

python - 在 Python 中交错两个 numpy 数组的行

python - 读取一个文件,然后用 Python 覆盖它

python - 当记录描述符超过 16,384 字节时 Pytables 出错

python - 无法使用 DataFrame.eval() 减去 datetime64

python - 快速评估大量输入值的数学表达式(函数)

python - linux cron作业使用python创建文件

python - 使用带有 DateTimeIndex 项的 select 从 HDFStore 检索 Pandas DataFrame 时缺少一个值