• Numpy之数据保存与读取


      在pandas使用的25个技巧中介绍了几个常用的Pandas的使用技巧,不少技巧在机器学习和深度学习方面很有用处。本文将会介绍Numpy在数据保存和读取方面的内容,这些在机器学习和深度学习方向也大有用处,因为通常我们会采用Numpy和Pandas处理数据,尤其是Pytorch,它和Numpy的结合更为紧密。
      我们先介绍Numpy的几个函数:

    numpy.savez(file, *args, **kwds)
    file:文件名/文件路径
    *args:要存储的数组,可以写多个,如果没有给数组指定Key,Numpy将默认从'arr_0','arr_1'的方式命名
    
    numpy.savez_compressed
    使用办法和numpy.savez一样,但是保存的文件会有压缩,可以减小文件大小。
    
    numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='
    ', header='', footer='', comments='# ', encoding=None)
    保存为txt文件,fname为文件名称,X为numpy中的变量,fmt为保存格式,delimiter为分隔符。
    

      我们的示例Python代码如下:

    # -*- coding: utf-8 -*-
    # author: Jclian91
    # place: Pudong Shanghai
    # time: 2020/3/14 15:14
    import numpy as np
    
    # 创建1000*1000的矩阵,元素为0-1之间的随机数
    matrix = np.random.rand(1000, 1000)
    
    # 使用save_z和save_compressed保存maxtrix
    np.savez("rand_matrix", matrix=matrix)
    np.savez_compressed("rand_matrix_compressed", matrix=matrix)
    
    # 保存为txt格式
    np.savetxt("rand_matrix.txt", matrix, fmt="%.6f", delimiter=",")
    

    需要注意的是,savetxt函数最多只能保存2维矩阵,3维以上就会报错,rand_matrix.txt中的部分内容如下:
    rand_matrix.txt
    我们看一下保存的文件大小:
    文件大小
    可以看到,用savez_compressed保存的文件会比savez保存的文件小,这是因为该函数在文件打包时进行了压缩。
      接着是读取npz文件中的内容,我们以rand_matrix.npz为例,示例代码如下:

    # -*- coding: utf-8 -*-
    # author: Jclian91
    # place: Pudong Shanghai
    # time: 2020/3/14 15:39
    import numpy as np
    
    # 读取npz文件
    mat = np.load("rand_matrix.npz")["matrix"]
    
    # 输出mat的相关信息
    print(mat.shape)
    print(mat[:5, :5])
    

    输出内容如下:

    (1000, 1000)
    [[0.92338524 0.08321306 0.60686435 0.57764367 0.93594528]
     [0.10552397 0.98878422 0.5237701  0.03220633 0.85022735]
     [0.06755187 0.18767634 0.24769326 0.83413499 0.69020446]
     [0.20900975 0.47176702 0.9302718  0.47056681 0.76258641]
     [0.46927451 0.72896195 0.50372099 0.58216099 0.58198673]]
    

      最后,我们将numpy中的矩阵保存为pickle文件,示例代码如下:

    # -*- coding: utf-8 -*-
    # author: Jclian91
    # place: Pudong Shanghai
    # time: 2020/3/14 15:45
    import numpy as np
    import pickle
    
    # 创建1000*1000的矩阵,元素为0-1之间的随机数
    matrix = np.random.rand(1000, 1000)
    
    # 保存为pickle文件
    with open("rand_matrix.pk", "wb") as f:
        pickle.dump(matrix, f)
    

    生成的文件大小如下:
    生成的pickle
    可以发现生成的pickle文件和numpy中的savez函数保存的文件大小一样。
      本次分享到此结束,感谢大家阅读~

  • 相关阅读:
    IOS 使用动态库(dylib)和动态加载framework
    iOS 开发者应该知道的 ARM 结构
    解惑好文:移动端H5页面高清多屏适配方案
    js 单例模式的实现方式----闭包和构造函数内部判断
    解决express video 手机无法播放的问题
    前后端通吃的单元测试---mocha
    swift-ios开发pod的使用(1)
    UI 自动化测试工具BackstopJS简介(1)
    阿里妈妈-RAP项目的实践(3)
    阿里妈妈-RAP项目的实践(2)
  • 原文地址:https://www.cnblogs.com/jclian91/p/12492581.html
Copyright © 2020-2023  润新知