首页 文章

完整列的有效计算(pytables,hdf5,numpy)

提问于
浏览
0

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

我天真的做法是在 table 上循环:

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)

但这似乎更慢 .

做这个的最好方式是什么?

1 回答

  • 1

    您的性能可能会受到写入CSV的限制,但除此之外,这个问题正是numexpr的用途 .

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

相关问题