• python 存储变量的几种方法


    1. numpy 库操作

    • numpy.save():数组会以未压缩的原始二进制格式保存在扩展名为. npy 的文件中。
    • numpy.load():读取 .npy 文件的数据,直接转换为 numpy 数组

    ☀☀☀<<举例>>☀☀☀

    >>> import numpy as np
    >>> a = np.arange(24).reshape(2,3,4)
    >>> a
    array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]],
     
           [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])
    >>> np.save("D:/aa/npp.npy", a)
    >>> b = np.load("D:/aa/npp.npy")
    >>> b
    array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]],
     
           [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    如果报错 Object arrays cannot be loaded when allow_pickle=False,需要改为如下:

    np.load(path, allow_pickle=True)
    
    • 1

    2. pandas 库操作

    • to_pickle:此方法是将 dataframe 变量数据直接存储为本地文件,对于文件扩展名没有要求
    • read_pickle:此方法是将本地存储的变量读取并转为 dataframe 文件

    ☀☀☀<<举例>>☀☀☀

    >>> import pandas as pd
    >>> import numpy as np
    >>> df = pd.DataFrame(np.arange(12).reshape(3, 4))
    >>> df
       0  1   2   3
    0  0  1   2   3
    1  4  5   6   7
    2  8  9  10  11
    >>> df.columns = ['I', 'II', 'III', 'IV']
    >>> df
       I  II  III  IV
    0  0   1    2   3
    1  4   5    6   7
    2  8   9   10  11
    >>> df.to_pickle(r"D:/aa/df")
     
    >>> dff = pd.read_pickle(r"D:/aa/df")
    >>> dff
       I  II  III  IV
    0  0   1    2   3
    1  4   5    6   7
    2  8   9   10  11
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3. sklearn 库操作

    经测试,保存的文件大小与numpy.save()方法一致。

    ☀☀☀<<举例>>☀☀☀

    注意:新版 sklearn 会报错,直接 import joblib 即可

    参考:(注意下面评论)cannot import name joblib from sklearn.externals

    from sklearn.externals import joblib
    # 保存x
    joblib.dump(x, 'x.pkl') 
    # 加载x
    x = joblib.load('x.pkl')
    
    • 1
    • 2
    • 3
    • 4
    • 5

    新版实现方法

    import joblib
    # 保存x
    joblib.dump(x, 'x.pkl') 
    # 加载x
    x = joblib.load('x.pkl')
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4. pickle 库操作

    ☀☀☀<<举例>>☀☀☀

    import pickle
      
    # 存储变量的文件的名字
    filename = 'shoplist.data'
    # 初始化变量
    shoplist = ['apple', 'mango', 'carrot']
    # 以二进制写模式打开目标文件
    f = open(filename, 'wb')
    # 将变量存储到目标文件中区
    pickle.dump(shoplist, f)
    # 关闭文件
    f.close()
    # 删除变量
    del shoplist
    # 以二进制读模式打开目标文件
    f = open(filename, 'rb')
    # 将文件中的变量加载到当前工作区
    storedlist = pickle.load(f)
    print(storedlist)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    5. Pytorch 库操作

    模型保存加载方式一:

    保存:

    torch.save(model.state_dict(), mymodel.pth)    # 只保存模型权重参数,不保存模型结构
    
    • 1

    调用:

    model = My_model(*args, **kwargs)  #这里需要重构模型结构,My_model
    model.load_state_dict(torch.load(mymodel.pth))  #这里根据模型结构,调用存储的模型参数
    model.eval()
    
    • 1
    • 2
    • 3

    模型保存加载方式二:

    保存:

    torch.save(model, mymodel.pth)  # 保存整个 model 的状态
    
    • 1

    调用:

    model=torch.load(mymodel.pth)  # 这里已经不需要重构模型结构了,直接 load 就可以  
    model.eval()
    
    • 1
    • 2
  • 相关阅读:
    Redis 速度快的原因
    基于Spring Boot+MySQL的半自动标注系统(人、车、人脸的自动检测)设计与实现
    大数据开发(Spark面试真题-卷四)
    ES6(二)
    如何理解某一个开发框架的意图,从而去写和落代码文件位置不会出错
    Git学习笔记7
    【单目3D目标检测】项目实战-道路车辆/行人3D目标检测
    不赚钱的科大讯飞,投资价值该怎么看?
    依赖注入(Dependency Injection, DI)在 iOS 开发中的应用
    Java配置39-搭建ELK服务器
  • 原文地址:https://blog.csdn.net/Dust_Evc/article/details/127986584