我有一些来自 HDF5 文件的事件数据:
>>> events
<class 'h5py._hl.dataset.Dataset'>
我得到这样的数组数据:
>>> events = events[:]
结构是这样的:
>>> type(events)
<type 'numpy.ndarray'>
>>> events.shape
(273856,)
>>> type(events[0])
<type 'numpy.void'>
>>> events[0]
(0, 30, 3523, 5352)
>>> # More information on structure
>>> [type(e) for e in events[0]]
[<type 'numpy.uint64'>,
<type 'numpy.uint32'>,
<type 'numpy.float64'>,
<type 'numpy.float64'>]
>>> events.dtype
[('start', '<u8'),
('length', '<u4'),
('mean', '<f8'),
('variance', '<f8')]
我需要获取第一个字段小于某个值的特定事件的最大索引。蛮力方法是:
>>> for i, e in enumerate(events):
>>> if e[0] >= val:
>>> break
元组的第一个索引已排序,因此我可以进行二等分以加快速度:
>>> field1 = [row[0] for row in events]
>>> index = bisect.bisect_right(field1, val)
这显示了改进,但[row[0] for row in event]
比我预期的要慢。关于如何解决这个问题的任何想法?