我有一个简单的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 回答
您的性能可能会受到写入CSV的限制,但除此之外,这个问题正是numexpr的用途 .
您可以使用Expr.set_output方法将结果写回hdf5,而不是迭代结果并直接写入CSV,然后寻找在单个优化调用中将此结果列转换为CSV的更有效方法;或者首先找到一种方法来取消CSV,因为如果性能确实是一个主要问题,使用它没有多大意义 .