# pythonmat矩阵和matlabnpy矩阵实现互相转换

> 作者/来源: UCloud 运营管理员
> 发布时间: 2022-09-20T13:12:00.000Z
> 分类: 其他
> 标签: Python
> 原文链接: http://117.50.162.249:3000/yun/articles/2498

---

# pythonmat矩阵和matlabnpy矩阵实现互相转换

> 来源: https://www.ucloud.cn/yun/127793.html
> 作者: 89542767
> 发布日期: 发布于2022-09-20 21:12

小编写这篇文章的目的，主要是给大家介绍关于python和npy矩阵的相关介绍，下面会给大家做出一个详细的解答，希望可以给各位读者带来帮助。

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

![0.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127793/images/127793_000.png)

　　保存文件：

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

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

![1.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127793/images/127793_001.png)

　　读取文件

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

![2.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127793/images/127793_002.png)

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

![4.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127793/images/127793_003.png)

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

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

![5.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127793/images/127793_004.png)

　　以上就是小编为大家总结的相关知识，希望可以为各位读者带来更多的帮助。