zoukankan      html  css  js  c++  java
  • Python中数据的保存和读取

    参考文献:https://www.cnblogs.com/Yiutto/p/5827775.html

    在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现。类似的在 Python 中,我们可以用 numpy.save() 和 numpy.load() 函数达到类似的效果,并且还可以用 scipy.io.savemat() 将数据保存为 .mat 格式,用scipy.io.loadmat() 读取 .mat 格式的数据,达到可以和 Matlab 或者Octave 进行数据互动的效果.

    下面分别介绍之:

    复制代码
    numpy.save() 和 numpy.load()
    
    numpy.save(arg_1,arg_2) 需要两个参数,arg_1 是文件名,arg_2 是要保存的数组. 如:
    
    import numpy as np
    
    a=np.mat('1,2,3;4,5,6')
    
    b=np.array([[1,2,3],[4,5,6]])
    
    np.save('a.npy',a)
    
    np.save('b.npy',b)
    复制代码

     这个时候 Python 的当前工作路径下就会多出 a.npy 和 b.npy 两个文件,当然我们也可以给出具体的路径,如 np.save('D:/PythonWork/a.npy',a)

    • 下面我们把保存的这两个数据文件导入到Python :

      复制代码
      data_a=np.load('a.npy')
      
      data_b=np.load('b.npy')
      
      print ('data_a 
      ',data_a,'
       the type is',type(data_a))
      
      print ('data_b 
      ',data_a,'
       the type is',type(data_b))
      
       
      
      data_a
      
      [[1 2 3]
      
      [4 5 6]]
      
      the type is <class 'numpy.ndarray'>
      
       
      
      data_b
      
      [[1 2 3]
      
      [4 5 6]]
      
      the type is <class 'numpy.ndarray'>
      复制代码
    • 我们可以看到这一过程把原本为矩阵的 a 变为数组型了

      • 如果想同时保存 a b 到同一个文件,我们可以用 np.savez() 函数,具体用法如下:

        复制代码
        np.savez('ab.npz',k_a=a,k_b=b)
        
        c=np.load('ab.npz')
        
        print (c['k_a'])
        
        print (c['k_b'])
        
         
        
        [[1 2 3]
        
        [4 5 6]]
        
         
        
        [[1 2 3]
        
        [4 5 6]]
        复制代码
      • 这时的 c 是一个字典,需要通过关键字取出我们需要的数据

        • 下面我们来认识下 scipy.io.savemat() 和 scipy.io.loadmat()

          首先我们用 scipy.io.savemat() 创建 .mat 文件,该函数有两个参数,一个文件名和一个包含变量名和取值的字典.

          复制代码
          import numpy as np
          
          from scipy import io
          
          a=np.mat('1,2,3;4,5,6')
          
          b=np.array([[1,1,1],[2,2,2]])
          
          io.savemat('a.mat', {'matrix': a})
          
          io.savemat('b.mat', {'array': b})
          复制代码
        • 至此 Python 的当前工作路径下就多了 a.mat 和 b.mat 这两个文件.

          下面我们用 Matlab 读取这两个文件

          可以看到 Matlab 已成功读取 Python 生成的 .mat 文件.

          我们在来看看 Python 是怎么读取 .mat 文件的。首先来读取刚才生成的 a.mat

          复制代码
          c=io.loadmat('a.mat')
          
          print (type(c))
          
          print (c)
          
           
          
          dict
          {'__version__': '1.0', '__globals__': [], '__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Tue Aug 4 16:49:28 2015', 'a_matrix': array([[1, 2, 3],[4, 5, 6]])}
          复制代码
        • 所以 Python 读取.mat 文件后返回的是个字典,如果要访问里面的值,就要用到关键字,如:

          复制代码
          print(c['a_matrix'])
          
           
          
          [[1 2 3]
          
          [4 5 6]]
          复制代码
        • 当然了,Python 也可以读取 Matlab 创建的 .mat 文件,从而可以把他们设置在同一工作路径下,在必要的时候进行数据的共享.

  • 相关阅读:
    Java NIO中的FileLock(文件锁)
    Java NIO中的Channel接口
    Java NIO中的Buffer类
    Java NIO简介
    Java 自定义序列化、反序列化
    Java 对象的序列化、反序列化
    SVN常用操作
    Windows下SVN的下载、安装
    Java RandomAccessFile类
    Java的IO流
  • 原文地址:https://www.cnblogs.com/happystudyeveryday/p/11085030.html
Copyright © 2011-2022 走看看