HDF5如何处理空行

HDF5 how to handle empty rows

我想将 MOCAP 传感器给出的一些值传递给 hdf5 文件。所以,为了简化事情,假设我有一个 table 就像下一个:

| time |  x1 |  y1 |  x2 |  y2 |
|    0 | 2.0 | 1.0 | 2.0 | 3.0 |
|    1 | 2.1 | 1.0 | 2.3 | 3.1 |
|    2 | 2.4 | 1.4 |     |     |
|    3 | 2.2 | 1.5 | 2.4 | 3.1 |
|    4 |     |     | 2.3 | 3.2 |

我有一些空白,因为我的传感器在特定时间无法读取特定 body 的信息。所以我的问题是,如何在单个数据集中处理这些空信息?

通过使用 csv 格式,我可以通过不在两个逗号之间写入任何值来忽略这些信息。我正在使用 h5py 和 python。请注意,我有正数和负数。

实际上问题在于,除了将 NaN 放入字段之外,是否还有更好或更合适的方法。

我认为你使用 NaN 是完全正确的。

我会设置一个 fill value 并使用它,在这样做时我会使用 NaNNone

#!/usr/bin/env python

import numpy as np
import h5py as h5

f = h5.File('test.h5','w')

ctype = np.dtype([('time','i'),
                  ('x1','f8'),('y1','f8'),
                  ('x2','f8'),('y2','f8')])

d = f.create_dataset('test', (5,), dtype=ctype)
d.set_fill_value = np.nan

data = np.array([(0, 2.0,    1.0,    2.0,    3.0),
                 (1, 2.1,    1.0,    2.3,    3.1),
                 (2, 2.4,    1.4,    np.nan, np.nan),
                 (3, 2.2,    1.5,    2.4,    3.1),
                 (4, np.nan, np.nan, 2.3,    3.2)],
                 dtype = ctype)
d[...] = data
f.close()

然后如果我们 运行 它并查看它生成的文件。

localhost ~$ ./test.py
localhost ~$ h5dump test.h5
 h5dump test.h5 
HDF5 "test.h5" {
GROUP "/" {
   DATASET "test" {
      DATATYPE  H5T_COMPOUND {
         H5T_STD_I32LE "time";
         H5T_IEEE_F64LE "x1";
         H5T_IEEE_F64LE "y1";
         H5T_IEEE_F64LE "x2";
         H5T_IEEE_F64LE "y2";
      }
      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
      DATA {
      (0): {
            0,
            2,
            1,
            2,
            3
         },
      (1): {
            1,
            2.1,
            1,
            2.3,
            3.1
         },
      (2): {
            2,
            2.4,
            1.4,
            nan,
            nan
         },
      (3): {
            3,
            2.2,
            1.5,
            2.4,
            3.1
         },
      (4): {
            4,
            nan,
            nan,
            2.3,
            3.2
         }
      }
   }
}
}

当然你不必使用复合数据类型,我只是在你的上下文中这样做了。