什么numpy dtypes h5py接受?

时间:2017-08-09 09:51:10

标签: python numpy h5py

我正在将带有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类型?

2 个答案:

答案 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