通过 h5py 更改 HDF5 压缩过滤器

Changing HDF5 compression filter via h5py

如何读取通过 lzf 压缩过滤器压缩的数据集并将其更改为本地 HDF5 第三方过滤器,如 szipzlib?会像 中所示那样简单地读取它,然后在编写数据集时使用指定的压缩方式写入它吗?

正如@bnaecker 所说,您可以复制现有数据集并使用不同的压缩过滤器创建一个新数据集。新数据集可以在同一个文件中,也可以在一个新文件中。注意:szip 需要特殊许可,因此我创建了一个从 lzfgzip 的示例。请参见下面的示例。任何 2 个压缩过滤器的过程都是相同的。只需更改 compression=value.

import h5py
import numpy as np

filename = "SO_64582861.h5"

# Create random data

arr1 = np.random.uniform(-1, 1, size=(10, 3))

# Create intial HDF5 file
with h5py.File(filename, "w") as h5f:
    h5f.create_dataset("ds_lzf", data=arr1, compression="lzf")
  
# Re-Open HDF5 file in 'append' mode
# Copy ds_lzf to ds_gzip with different compression setting
# could also copy to a second HDF5 file
with h5py.File(filename, "a") as h5f:
    # List all groups
    print("Keys: %s" % h5f.keys())
    arr2 = h5f["ds_lzf"][:]
    h5f.create_dataset("ds_gzip", data=arr2, compression="gzip")