【问题标题】:HDF5 how to handle empty rowsHDF5如何处理空行
【发布时间】:2016-02-12 20:50:27
【问题描述】:

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

| 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 |

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

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

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

【问题讨论】:

    标签: python hdf5 h5py


    【解决方案1】:

    我认为您使用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
             }
          }
       }
    }
    }
    

    当然,您不必使用复合数据类型,我只是这样做了,因为它在您的上下文中是有意义的。

    【讨论】:

    • 迟到总比不到好,对不起,我忘了接受答案。我认为这是因为这是我当时已经在使用的方法。
    猜你喜欢
    • 2016-02-19
    • 2013-04-05
    • 2022-07-06
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2021-07-06
    • 2017-01-14
    相关资源
    最近更新 更多