我想你是完全正確的使用NaN
。
我會設置一個fill value並使用它,這樣做時我會使用NaN
或None
。
#!/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
}
}
}
}
}
當然,你不必使用複合數據類型,我只是做了,因爲它在上下文種是有道理的。
遲到比晚上好,抱歉,我忘了接受答案。我認爲這是因爲這是我當時已經在使用的方法。 – silgon