HDF5 как обрабатывать пустые строки
Я хочу передать некоторые значения, заданные датчиком 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 запятыми. я использую h5py
с питоном. Как примечание, у меня есть положительные и отрицательные числа.
На самом деле вопрос был бы, если есть лучший или более правильный способ, чем положить NaN
в поле.
1 ответ
Я думаю, что вы абсолютно правы в использовании NaN
,
Я бы установить значение заполнения и использовать его, при этом я бы использовал 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
}
}
}
}
}
Конечно, вам не нужно использовать составной тип данных, я просто сделал это, поскольку это имеет смысл в вашем контексте.