2015-11-11 61 views
2

我想將由MOCAP傳感器給出的一些值傳遞給hdf5文件。因此,爲了把事情簡單化,讓我們說我有一個表像下一個: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放在現場。

回答

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

當然,你不必使用複合數據類型,我只是做了,因爲它在上下文種是有道理的。

+0

遲到比晚上好,抱歉,我忘了接受答案。我認爲這是因爲這是我當時已經在使用的方法。 – silgon