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

作者:山上有只羊M 时间:2023-10-19 17:12:02 

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))

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

保存文件:

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

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

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

读取文件

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

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

如图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})

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

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

读取数据

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

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

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

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

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

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

来源:https://blog.csdn.net/shanshangyouzhiyangM/article/details/85251683

标签:mat矩阵,npy矩阵,python,matlab
0
投稿

猜你喜欢

  • Mysql中的NULL和Empty String

    2024-01-24 02:27:27
  • 基于Python实现剪切板实时监控方法解析

    2023-05-31 16:01:59
  • MySQL触发器学习总结

    2024-01-14 10:31:38
  • Python使用迭代器捕获Generator返回值的方法

    2022-11-25 09:40:35
  • python创建学生成绩管理系统

    2023-08-09 04:19:38
  • PHP实现阿里大鱼短信验证的实例代码

    2024-05-11 09:52:20
  • Python生成器与迭代器详情

    2022-04-09 15:36:27
  • Python爬虫实例——scrapy框架爬取拉勾网招聘信息

    2023-01-20 19:06:45
  • python3在各种服务器环境中安装配置过程

    2021-10-27 22:49:55
  • mysql日志文件在哪 如何修改MySQL日志文件位置

    2024-01-22 22:09:14
  • python通过函数名调用函数的几种方法总结

    2021-03-22 03:40:35
  • Python实现一键下载视频脚本

    2023-08-26 18:51:17
  • python实现门限回归方式

    2023-12-27 09:19:06
  • 商品评论的设计

    2009-12-23 13:06:00
  • 8种常用的Python工具

    2023-03-28 10:49:49
  • 解决Keyerror ''acc'' KeyError: ''val_acc''问题

    2022-09-05 11:28:12
  • pygame实现弹球游戏

    2023-05-26 20:38:44
  • 用Python代码自动生成文献的IEEE引用格式的实现

    2021-05-26 15:24:49
  • php while循环控制的简单实例

    2024-05-11 10:03:54
  • asp如何实现无组件上传二进制文件?

    2010-06-03 10:09:00
  • asp之家 网络编程 m.aspxhome.com