HDF5格式的时间序列存储
Time series storage in HDF5 format
我想将时间序列(传感器数据)的结果存储到 HDF5 文件中。我似乎无法为我的数据集赋值。显然,我做错了什么,我只是不确定是什么……
代码:
from datetime import datetime, timezone
import h5py
TIME_SERIES_FLOAT = np.dtype([("time", h5py.special_dtype(vlen=str)),
("value", np.float)])
h5 = h5py.File('balh.h5', "w")
dset = create_dataset('data', (1, 2), chunks=True, maxshape=(None, 2), dtype=TIME_SERIES_FLOAT)
dset[0]['time'] = datetime.now(timezone.utc).astimezone().isoformat()
dset[0]['value'] = 0.0
然后更新代码调整数据集的大小并添加更多值。显然,按值执行此操作效率低下:
size = list(dset.shape)
size[0] += 1
dset.resize(tuple(size))
dset[size[0]-1]['time'] = datetime.now(timezone.utc).astimezone().isoformat()
dset[size[0]-1]['value'] = value
更好的方法是将一些数据整理成 np.array
,然后每隔一段时间添加一次……
这样合理吗?…
我需要更多咖啡……
定义的类型是一个元组,包含一个字符串(又名时间)和一个浮点数(又名值)所以要添加一个,我需要:
dset[-1] = (datetime.now(timezone.utc).astimezone().isoformat(), value)
其实就这么简单!
添加许多条目是这样完成的:
l = [('stamp', x) for x in range(10)]
size = list(dset.shape)
tmp = size[0]
size[0] += len(l)
dset.resize(tuple(size))
for x in range(len(l)):
dset[tmp+x] = l[x]
尽管如此,这感觉有点笨拙和次优……
我想将时间序列(传感器数据)的结果存储到 HDF5 文件中。我似乎无法为我的数据集赋值。显然,我做错了什么,我只是不确定是什么……
代码:
from datetime import datetime, timezone
import h5py
TIME_SERIES_FLOAT = np.dtype([("time", h5py.special_dtype(vlen=str)),
("value", np.float)])
h5 = h5py.File('balh.h5', "w")
dset = create_dataset('data', (1, 2), chunks=True, maxshape=(None, 2), dtype=TIME_SERIES_FLOAT)
dset[0]['time'] = datetime.now(timezone.utc).astimezone().isoformat()
dset[0]['value'] = 0.0
然后更新代码调整数据集的大小并添加更多值。显然,按值执行此操作效率低下:
size = list(dset.shape)
size[0] += 1
dset.resize(tuple(size))
dset[size[0]-1]['time'] = datetime.now(timezone.utc).astimezone().isoformat()
dset[size[0]-1]['value'] = value
更好的方法是将一些数据整理成 np.array
,然后每隔一段时间添加一次……
这样合理吗?…
我需要更多咖啡……
定义的类型是一个元组,包含一个字符串(又名时间)和一个浮点数(又名值)所以要添加一个,我需要:
dset[-1] = (datetime.now(timezone.utc).astimezone().isoformat(), value)
其实就这么简单!
添加许多条目是这样完成的:
l = [('stamp', x) for x in range(10)]
size = list(dset.shape)
tmp = size[0]
size[0] += len(l)
dset.resize(tuple(size))
for x in range(len(l)):
dset[tmp+x] = l[x]
尽管如此,这感觉有点笨拙和次优……