2017-08-09 57 views
2

我正在序列化一个Python字典与numpy类型到H5文件。什么numpy dtypes h5py接受?

一般,代码

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只存储特定类型?

例如,​​将是一个选择,但它会错过float32(np.ndarray, np.generic)将是另一种选择,但H5py是否接受所有通用numpy类型?

回答

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”