在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 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 \n',data_a,'\n the type is',type(data_a))
    
    print ('data_b \n',data_a,'\n 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 文件,从而可以把他们设置在同一工作路径下,在必要的时候进行数据的共享.

Python中数据的保存和读取的更多相关文章

  1. Python numpy数据的保存和读取

    在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...

  2. python中数据的保存

    1.将list中的数据写入到excel文件中 利用python包numpy(实现方式应该有许多种,这里只是记录成功实现的一种)中的savetxt 局限性:要保存的list可以为[1,2,3,4,5]这 ...

  3. 【matlab】将matlab中数据输出保存为txt或dat格式

    将matlab中数据输出保存为txt或dat格式 总结网上各大论坛,主要有三种方法. 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt ...

  4. Matlab数据处理——数据的保存和读取方法操作

    1:dlmwrite()函数保存成txt文件 使用方法:      dlmwrite('filename', M)      使用默认分隔符“,”将矩阵M写入文本文件filename中:      d ...

  5. Android中数据的保存

    1. 概述 在Android中有以下几种保存数据方式: 1). 使用sharedPreference去保存:只有应用程序自己可以访问 2). 保存在应用程序私有的文件夹下:只有应用程序自己可以访问 3 ...

  6. Matlab和simulink数据的保存和读取

    文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保存,以备在需要时再次导入.保存工作区可以通过菜单进行,也可以通过命令窗口进行. 1. 保存整个工作区 选择Fil ...

  7. python中数据类型转换

    python中list和str互转   1.list转str 假设有一个名为test_list的list,转换后的str名为test_str 则转换方法: test_str = "" ...

  8. Python中Opencv和PIL.Image读取图片的差异对比

    近日,在进行深度学习进行推理的时候,发现不管怎么样都得不出正确的结果,再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的. image = np.array(Ima ...

  9. Python中数据的排序

    目录 列表的排序 sort(key,reverse)方法 sorted(target,key,reverse) 函数 元组tuple的排序 sort(key,reverse)方法 sorted(tar ...

随机推荐

  1. UTF-8 GBK GB2312 之间的区别和关系

    UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 ...

  2. javaSE第九天

      第九天    50 1. final关键字(掌握)    50 (1)定义:    50 (2)特点:    51 (3)面试相关:    51 A:final修饰的局部变量    51 B:fi ...

  3. c#桌面小软件

    这是以前练习时用c#做的桌面小软件,今天回顾下. 这是设计界面 可以看出该程序能够播放网络歌曲及浏览新闻. 实现:歌曲来源百度API,播放WindowsMediaPlayer api地址:string ...

  4. ARC————自动引用计数

    一.内存管理/引用计数 1.引用计数式内存管理的方式(下面四种) 对象操作 OC方法 生成并持有对象 alloc/new/copy/mutableCopyd等方法 持有对象 retain方法 释放对象 ...

  5. webservice简介以及简单使用

    本文主要是简单的介绍webservice是什么.webservice的由来.webservice的作用,以及后面会介绍webservice的使用. webservice是什么? 目前,Web serv ...

  6. js各种宽高(1)

    在javascript中操作dom节点让其运动的时候,常常会涉及到各种宽高以及位置坐标等概念,如果不能很好地理解这些属性所代表的意义,就不能理解js的运动原理,同时,由于这些属性概念较多,加上浏览器之 ...

  7. php使用swoole实现一个简单的多人在线聊天群发

    聊天逻辑的好多细节没有实现,只实现群发. php代码: $serv = new swoole_websocket_server("127.0.0.1",3999); //服务的基本 ...

  8. C++十进制转换为二进制

    题目内容:将十进制整数转换成二进制数. 输入描述:输入数据中含有不多于50个的整数n(-231<n<231). 输出描述:对于每个n,以11位的宽度右对齐输入n值,然后输出“-->” ...

  9. C#自定义导出数据到Excel中的类封装

    using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...

  10. How to get the underlying SSRS Report Query, reset query , add your own ranges and execute report [AX2012]

    Below is the small code snippet to get the underlying query of the SSRS report, reset query, prompt ...