mat矩阵和npy矩阵实现互相转换(python和matlab)

 更新时间:2022年07月12日 14:28:38   作者:山上有只羊M  
这篇文章主要介绍了mat矩阵和npy矩阵实现互相转换(python和matlab),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mat矩阵和npy矩阵互相转换

numpy.narray矩阵保存为mat文件

import numpy as np
import scipy.io as io
mat_path = 'your_mat_save_path'
mat = np.zeros([4, 20])
io.savemat(mat_path, {'name': mat})

注意这里的mat是numpy类型的

读取mat文件

import numpy as np
from scipy import io
mat = io.loadmat('yourfile.mat')
# 如果报错:Please use HDF reader for matlab v7.3 files
# 改为下一种方式读取
import h5py
mat = h5py.File('yourfile.mat')
# mat文件里可能有多个cell,各对应着一个dataset
# 可以用keys方法查看cell的名字, 现在要用list(mat.keys()),
# 另外,读取要用data = mat.get('名字'), 然后可以再用Numpy转为array
print(mat.keys())
# 可以用values方法查看各个cell的信息
print(mat.values())
# 可以用shape查看维度信息
print(mat['your_dataset_name'].shape)
# 注意,这里看到的shape信息与你在matlab打开的不同
# 这里的矩阵是matlab打开时矩阵的转置
# 所以,我们需要将它转置回来
mat_t = np.transpose(mat['your_dataset_name'])
# mat_t 是numpy.ndarray格式
# 再将其存为npy格式文件
np.save('yourfile.npy', mat_t)

npy文件与mat文件的保存与读取

除了常用的csv文件和excel文件之外,我们还可以通过PY把数据保存文npy文件格式和mat文件格式。

1. npy文件

npy即numpy对应的文件格式,关于其保存使用的是np.save()方法,其读取使用的是np.load()方法。 

具体示例如下:

import numpy as np
a = np.mat('1, 2, 3;4, 5, 6')
print(a)
print(type(a))
print("=================================")
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
print(type(b))

              

保存文件:

如图,矩阵和numpy数组都支持以npy文件类型保存。

np.save('a.npy', a)
np.save('b.npy', b)

                    

读取文件

data1 = np.load('a.npy')
data2 = np.load('b.npy')
print(data1)
print(type(data1))
print("=================================")
print(data2)
print(type(data2))

               

如图npy数据被成功读取,且都是numpy数组数据类型。

2. mat文件

保存为mat文件依赖于scipy库中的scipy.io.savemat()方法,读取则需要用到scipy.io.loadmat()方法。

保存时,不仅仅需要传入变量,还需要将该变量的类型一并以字典的形式传入,一样支持numpy数组和矩阵。

具体示例如下:

import numpy as np
from scipy import io
a = np.mat('1, 2, 3;4, 5, 6')
print(a)
print(type(a))
print("=================================")
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
print(type(b))
io.savemat('a.mat', {'matrix': a})
io.savemat('b.mat', {'array': b})

读取数据

data1 = io.loadmat('a.mat')
print(data1)
print(type(data1))
print("=================================")
data2 = io.loadmat('b.mat')
print(data2)
print(type(data2))

如图,数据成功被读取。但是读取的结果是一个字典,如果需要进一步读取到数据,则需要根据键名将其取出:

print(data1['matrix'])
print(type(data1['matrix']))
print("=================================")
print(data2['array'])
print(type(data2['array']))

               

取出时的键与存储时的变量类型有关,取出的数据都是numpy数组,不再有矩阵类型。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解10个可以快速用Python进行数据分析的小技巧

    详解10个可以快速用Python进行数据分析的小技巧

    这篇文章主要介绍了详解10个可以快速用Python进行数据分析的小技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 使用python监测网络连接和网速的实现代码

    使用python监测网络连接和网速的实现代码

    在我们日常生活中网络连接和网速在工作中非常重要,本文将介绍如何使用Python程序来监测互联网连接的速度和中断情况,并通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-03-03
  • matplotlib savefig 保存图片大小的实例

    matplotlib savefig 保存图片大小的实例

    今天小编就为大家分享一篇matplotlib savefig 保存图片大小的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 使用Keras构造简单的CNN网络实例

    使用Keras构造简单的CNN网络实例

    这篇文章主要介绍了使用Keras构造简单的CNN网络实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Pyinstaller将py打包成exe的实例

    Pyinstaller将py打包成exe的实例

    下面小编就为大家分享一篇Pyinstaller将py打包成exe的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 详解Python中的with语句和上下文管理器

    详解Python中的with语句和上下文管理器

    上下文管理器可以使用 with 语句,with 语句之所以这么强大,背后是由上下文管理器做支撑的,也就是说刚才使用 open 函数创建的文件对象就是就是一个上下文管理器对象,这篇文章主要介绍了详解Python中的with语句和上下文管理器,需要的朋友可以参考下
    2022-10-10
  • OpenCV学习之图像形态学处理详解

    OpenCV学习之图像形态学处理详解

    这篇文章主要为大家详细介绍了OpenCV中图像形态学处理的相关知识,例如:腐蚀操作、膨胀操作、开闭运算、梯度运算、Top Hat Black Hat运算等操作,需要的可以参考一下
    2023-02-02
  • 使用PyCharm调试程序实现过程

    使用PyCharm调试程序实现过程

    这篇文章主要介绍了使用PyCharm调试程序实现过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • pyqt QPlainTextEdit 中捕获回车的示例代码

    pyqt QPlainTextEdit 中捕获回车的示例代码

    在PyQt的QPlainTextEdit控件中,可以通过重写keyPressEvent()函数来捕获键盘事件,这篇文章主要介绍了pyqt QPlainTextEdit 中捕获回车,需要的朋友可以参考下
    2024-03-03
  • Python np.where()的详解以及代码应用

    Python np.where()的详解以及代码应用

    numpy里有一个非常神奇的函数叫做np.where()函数,下面这篇文章主要给大家介绍了关于Python np.where()的详解以及代码应用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08

最新评论