读取.mat
数据
scipy.io.loadmat("FilePath")
功能:
读取路径为"FilePath"
的.mat
文件,函数返回值为字典类型dict
。之后还需要通过后续操作将值提取出来(字典操作来提取键值对的值)。
关于为什么scipy.io.loadmat("FilePath")
的结果是一个字典,这是因为一个.mat
文件中存在多个变量,每一个变量名都对应相应的数据,也就是变量名和变量值的键值对。
语法:
scipy.io.loadmat("FilePath")
示例(包括):
from scipy import io
import numpy as np
FilePath = "C:\Datasets\PaviaU\PaviaU_gt.mat"
data = io.loadmat(FilePath)
print(data)
# {'__header__': b'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Fri May 20 18:25:52 2011', '__version__': '1.0', '__globals__': [], 'paviaU_gt':
# array([[0, 0, 0, ..., 0, 0, 0],
# [0, 0, 0, ..., 0, 0, 0],
# [0, 0, 0, ..., 0, 0, 0],
# ...,
# [2, 2, 2, ..., 0, 0, 0],
# [2, 2, 2, ..., 0, 0, 0],
# [2, 2, 2, ..., 0, 0, 0]], dtype=uint8)}
print(type(data))
# <class 'dict'>
PaviaU_gt_load = data['paviaU_gt']
print(PaviaU_gt_load)
# [[0 0 0 ... 0 0 0]
# [0 0 0 ... 0 0 0]
# [0 0 0 ... 0 0 0]
# ...
# [2 2 2 ... 0 0 0]
# [2 2 2 ... 0 0 0]
# [2 2 2 ... 0 0 0]]
print(type(PaviaU_gt_load))
# <class 'numpy.ndarray'>
print(np.shape(PaviaU_gt_load))
# (610, 340)
可以看到,在data = io.loadmat(FilePath)
之后,data
是字典类型。这个字典只存在一个键值对:
-
键:’
paviaU_gt
’,字符串类型。(大写字母被降为小写字母) -
值:
array([[0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0], ..., [2, 2, 2, ..., 0, 0, 0], [2, 2, 2, ..., 0, 0, 0], [2, 2, 2, ..., 0, 0, 0]], dtype=uint8)}
然后通过字典操作PaviaU_gt_load = data['paviaU_gt']
,得到字典data
的键paviaU_gt
的对应的值,返回值为numpy.ndarray
类型。
array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[2, 2, 2, ..., 0, 0, 0],
[2, 2, 2, ..., 0, 0, 0],
[2, 2, 2, ..., 0, 0, 0]], dtype=uint8)}
存储.mat
类型
io.savemat('SavedData.mat',{'key1':data1, 'key2':data2})
功能:
将ndarray
类型的数据data1
、data2
以key1
、key2
为变量名,保存在SavedData.mat
中。
其中SavedData.mat
会被保存到项目文件下(该.py文件的相同路径)。
语法:
io.savemat('SavedData.mat',{'key1':data1, 'key2':data2})
示例:
from scipy import io
import numpy as np
x = np.array([1,2,3,4,5,6,7,8,9])
x = x.reshape(3,3)
print(x)
print(x.shape)
io.savemat('SavedData.mat',{'x':x})
保存路径