我正在将带有numpy类型的Python字典序列化为H5文件。
一般来说,代码是
for key, value in dict.items():
if isinstance(value, str):
f.attrs[key] = value.encode('utf-8')
elif isinstance(value, XXXXXX):
param_dset = f.create_dataset(key, value.shape, dtype=value.dtype)
if not value.shape:
# scalar
param_dset[()] = value
else:
param_dset[:] = value
elif isinstance(value, dict):
save_dict_to_hdf5_group(f.create_group(key), value)
else:
raise ValueError('Cannot save type "%s" to HDF5' % type(value))
我正在努力投入XXXXXX
。具体来说,我可以放任何numpy类型,还是H5只存储特定类型?
例如,(np.ndarray, np.int64)
是一个选择,但它会错过float32
。 (np.ndarray, np.generic)
将是另一种选择,但H5py是否接受所有通用的numpy类型?
答案 0 :(得分:2)
来自h5py文档:
完全支持的类型:
Type Precisions Notes
Integer 1, 2, 4 or 8 byte, BE/LE, signed/unsigned
Float 2, 4, 8, 12, 16 byte, BE/LE
Complex 8 or 16 byte, BE/LE Stored as HDF5 struct
Compound Arbitrary names and offsets
Strings (fixed-length) Any length
Strings (variable-length) Any length, ASCII or Unicode
Opaque (kind ‘V’) Any length
Boolean NumPy 1-byte bool Stored as HDF5 enum
Array Any supported type
Enumeration Any NumPy integer type Read/write as integers
References Region and object
Variable length array Any supported type See Special Types
不支持的类型:
Type
HDF5 “time” type
NumPy “U” strings
NumPy generic “O”
答案 1 :(得分:0)
Native HDF5 type NumPy equivalent
---------------------------------------------
Integer dtype("i")
Float dtype("f")
Strings (fixed width) dtype("S10")
Strings (variable width) h5py.special_dtype(vlen=bytes)
Compound dtype([ ("field1": "i"), ("field2": "f") ])
Enum h5py.special_dtype(enum=("i",{"RED":0, "GREEN":1, "BLUE":2}))
Array dtype("(2,2)f")
Opaque dtype("V10")
Reference h5py.special_dtype(ref=h5py.Reference)
<块引用>
https://www.oreilly.com/library/view/python-and-hdf5/9781491944981/ch07.html