【问题标题】:Efficient calculation on complete columns (pytables, hdf5, numpy)对完整列进行高效计算(pytables、hdf5、numpy)
【发布时间】:2014-09-02 02:18:19
【问题描述】:

我有一个包含十列和 100000 行的简单 HDF5 文件(由 PyTables 创建)。对于每个值,我必须应用一个简单的线性方程,每列具有不同的参数,并将内容写入 CSV。

我幼稚的方法是遍历表格:

for row in table.iterrows():
    print "%f,%f,..." % (row['a'] * 1.0 + 2.0, row['b'] * 3.0 + 4.0, ...)

但我想知道,选择列并以这种方式计算它们然后迭代结果数组是否会更有效:

a = numpy.add(numpy.multiply(table.cols.a, 1.0), 2.0)
b = numpy.add(numpy.multiply(table.cols.b, 3.0), 4.0)

但这似乎更慢。

最好的方法是什么?

【问题讨论】:

    标签: python numpy hdf5 pytables


    【解决方案1】:

    你的表现可能会受到写入 CSV 的限制,但除此之外,这个问题正是 numexpr 的目的。

    您可以使用 Expr.set_output 方法将结果写回 hdf5,而不是遍历结果并直接写入 CSV,然后寻找一种更有效的方法在单个优化调用中将此结果列转换为 CSV ;或者首先找到一种方法来取消 CSV,因为如果性能确实是一个主要问题,那么使用它没有多大意义。

    【讨论】:

    • 非常感谢,作为一个 PyTables 新手,我以前从未听说过这个功能。快速检查一下,这比使用 iterrows (~600ms) 快大约三分之一 (~400ms)!凉爽的! (numpy 的方法太慢了,几分钟后我就中断了它。)
    猜你喜欢
    • 2012-12-17
    • 2017-12-13
    • 2012-06-23
    • 2014-09-05
    • 2019-01-30
    • 2013-12-03
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多