将日期从HDF5数据集转换为numpy数组

时间:2014-03-12 02:45:03

标签: python numpy hdf5

我有一个HDF5数据集,其中包含日期矩阵,我在我的Python脚本中加载并希望将其用作numpy数组 -

>>> mat = h5py.File('xyz.mat')
>>> dates = mat['dates']
>>> dates
<HDF5 dataset "dates": shape (11, 285), type "<u2">

如果我尝试将其转换为numpy数组,我会收到以下错误 -

>>> dates = np.array(dates, dtype='datetime64')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/soft/python-epd/canopy-1.1.0-standalone/lib/python2.7/site-packages/h5py/_hl/dataset.py", line 490, in __array__
    self.read_direct(arr)
  File "/soft/python-epd/canopy-1.1.0-standalone/lib/python2.7/site-packages/h5py/_hl/dataset.py", line 460, in read_direct
    self.id.read(mspace, fspace, dest)
  File "h5d.pyx", line 173, in h5py.h5d.DatasetID.read (h5py/h5d.c:2523)
  File "h5t.pyx", line 1439, in h5py.h5t.py_create (h5py/h5t.c:11361)
TypeError: No conversion path for dtype: dtype('<M8')

数据集中的每个日期的格式为&#34; 05-Mar-2012&#34;。

1 个答案:

答案 0 :(得分:1)

您的日期似乎已存储... 奇怪。 您的数据集是一个11 x 285矩阵的16位无符号整数。 (它闻起来像是从Matlab导出的。)

基本上问题是Numpy尝试(并且失败)将矩阵的每个元素(a.k.a.日期的每个单独字符)转换为日期。

从HDF5的角度来看,将它们存储为包含11个字符长字符串的285元素数组会更有意义。那么Numpy的转换就会成功。

如果无法更改文件的生成方式,可以通过连接矩阵的每个285列的11个字符来重构Python中的字符串。但那会很脏,你最好修复文件的生成方式;)