美文网首页
H5py与Pickle 详解

H5py与Pickle 详解

作者: 爱修仙的道友 | 来源:发表于2019-04-19 17:54 被阅读0次

正、反序列化

  1. 当数据计算出来,需要存储,又不可能存储到内存中,掉电丢失,所以就需要存到硬盘里
  2. 无论是矩阵还是张量,在内存是将对象用展开的方式以线性的结构进行存储,

Pickle
在 python 中,一般可以使用 pickle 类来进行 python 对象的序列化,而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复。

文件操作 -- file(般二进制存储,不可读,但空间占用小)

dump() 导出
load() 加载

若存储数据多种多样,可以构造字典
ndarray[1,2,3]
string helloworld

import pickle
import numpy as np

N = 1000
def pickle_serialization():
    with open("sample.pkl", "wb") as f:
        array = np.random.randn(N, N)
        pickle.dump(array, f)
        print("Serialization: {}".format(array))

def pickle_deserialization():
    with open("sample.pkl", "rb") as f:
        array = pickle.load(f)
        print("Deserialization: {}".format(array))

if __name__ == '__main__':
    pickle_serialization()
    pickle_deserialization()

h5py
一个 HDF5 文件是一种存放两类对象的容器:dataset 和 group. Dataset 是类似于数组的数据集,而 group 是类似文件夹一样的容器,存放 dataset 和其他 group。在使用h5py 的时候需要牢记一句话:groups 类比词典,dataset 类比 Numpy 中的数组。
HDF5 的 dataset 虽然与 Numpy 的数组在接口上很相近,但是支持更多对外透明的存储特征,如数据压缩,误差检测,分块传输。
详细文档:http://docs.h5py.org/en/stable/quick.html

自带 groups 组和 datasets 概念(多级文件夹) 就不需要转为dict,进行存储
g1 文件夹下的dataset1文件 存储了[1,2,3,4]
g1/dataset1 [1,2,3,4]
g2/dataset1 "1,2,3,4"

import numpy as np
import h5py

N = 1000
def h5py_serialization():
    with h5py.File("sample.h5", "w") as hf:
        array = np.random.randn(N, N)
        group = hf.create_group("group")
        group.create_dataset("dataset", data=array)
        print("Serialization: {}".format(array))

def h5py_deserialization():
    with h5py.File("sample.h5", "r") as hf:
        for key in hf.keys():
            group = hf.get(key)
            for item in group.items():
                # [()] 代替.value
                print("After deserialization: {}".format(group[item[0]][()]))

if __name__ == '__main__':
    h5py_serialization()
    h5py_deserialization()

异常处理

安全的文件打开方式
with ... as ..

@contextmanager

安全的文件打开方式
try:
f.open()
catch:
xxx
finally
f.close()

相关文章

网友评论

      本文标题:H5py与Pickle 详解

      本文链接:https://www.haomeiwen.com/subject/dzgqgqtx.html