繁体   English   中英

使用H5Py将日期时间存储在HDF5中

[英]Store datetimes in HDF5 with H5Py

如何使用h5py将NumPy日期时间对象存储在HDF5中?

In [1]: import h5py

In [2]: import numpy as np

In [3]: f = h5py.File('foo.hdfs', 'w')

In [4]: d = f.create_dataset('data', shape=(2, 2), dtype=np.datetime64)
TypeError: No conversion path for dtype: dtype('<M8')

目前HDF5不提供时间类型(现在不支持H5T_TIME),因此没有明显的datetime64映射。

h5py的设计目标之一是坚持基础HDF5功能集。 这允许人们将数据写入他们的文件,并且知道它将往返并且可以被使用其他HDF5感知应用程序(如IDL和Matlab)的人检索。 我们之前做过一些小的例外; 例如,NumPy bools和复数分别映射到HDF5枚举和复合类型。 但是datetime64似乎是一个更复杂的动物。

除非有一个令人信服的提案确保(1)信息往返和(2)其他HDF5客户可以合理地理解它,我认为我们不会实现对datetime64的本机支持。

在HDF5中,人们通常使用ISO日期格式的某些变体将其日期/时间存储为字符串值。 您可以将其视为一种解决方法。

另见: https//github.com/h5py/h5py/issues/443

目前h5py不支持时间类型( FAQIssue )。

NumPy datetime64s长8个字节。 因此,作为一种变通方法,您可以将数据视为'<i8'在hdf5文件中存储整数,并在检索时将其视为np.datetime64

import numpy as np
import h5py

arr = np.linspace(0, 10000, 4).astype('<i8').view('<M8[D]').reshape((2,2))
print(arr)
# [['1970-01-01' '1979-02-16']
#  ['1988-04-02' '1997-05-19']]
with h5py.File('/tmp/out.h5', "w") as f:
    dset = f.create_dataset('data', (2, 2), '<i8')
    dset[:,:] = arr.view('<i8')
with h5py.File('/tmp/out.h5', "r") as f:
    dset = f.get('data')
    print(dset.value.view('<M8[D]'))
    # [['1970-01-01' '1979-02-16']
    #  ['1988-04-02' '1997-05-19']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM