我正在寻找一种从hdf
表中检索已排序记录的方法。这是一个python MWE:
import tables
import numpy as np
class Measurement(tables.IsDescription):
time = tables.Float64Col()
value = tables.Float64Col()
h5 = tables.open_file('test.hdf', 'w')
h5.create_table('/', 'test', Measurement)
table = h5.root.test
data = np.array([(0, 6), (5, 1), (1, 8)], dtype=[('time', '<f8'), ('value', '<f8')])
table.append(data)
table.cols.time.createCSIndex()
现在,我想检索time > 0
的所有记录,按time
排序。如果我这样做:
table.read_where('time > 0')
然后它得到:
array([(5.0, 1.0), (1.0, 8.0)], dtype=[('time', '<f8'), ('value', '<f8')])
未按time
排序。如果我尝试使用read_sorted
,那么我得到整个表而不是一个子集(read_sorted
没有条件参数)。
通常的做法是什么?我应该确保我的表存储在数据库中吗?或者我应该在read_where
之后对检索到的集合进行排序?
答案 0 :(得分:0)
我不认为你的问题有一个适合所有人的答案。
如果您处于一次写入文件并且必须多次阅读的情况下,以排序的方式存储表肯定是个好主意。对于现有文件,您可以使用ptrepack
实用程序,该实用程序可以按排序方式复制现有数据。
如果您只读过几次数据,那么以排序方式存储可能不是最有效的方式。只需read_where
即可将您的数据存入内存并进行排序。
如果您的数据很大以适应内存,您必须以有序的方式存储数据。
还有更多可能性,具体取决于您的系统性能(SSD,HDD,网络存储,CPU,......)