Python中操作.mat文件的方法。有時在python得到一些數據,需要作出曲線數據圖,但是使用python中的matplotlib庫作圖比較單一,不能很好的展示圖像。那麼就需要把數據保存,然後在matlab中作圖。代碼如下
# -*- coding: utf-8 -*-
"""
@author: Life696
僅供學習、交流使用
"""
import scipy.io as scio
# 假設如下是需要保存到.mat文件中的數據,一共有三組
data1_list = [1,2,3,4,5,6]
data2_list = [6,5,4,3,2,1]
data3_list = [1,3,5]
# 目標文件的位置和名字。位置:和該.py文件同級;名字test_data.mat
# 如這個文件存在就直接寫入這個文件;如果不存在就自動創建再寫入
dataFile = './test_data.mat'
# 數據保存在.mat文件格式爲字典類型,鍵值對的形式。
scio.savemat(dataFile, {'data1_name' : data1_list,
'data2_name' : data2_list,
'data3_name' : data3_list,
})
print("數據已經保存..........")
matFile = "./test_data.mat"
# 讀取出這個.mat文件的數據
mat_data = scio.loadmat(matFile)
print(type(mat_data)) # 打印加載的.mat數據類型,是一個字典,鍵值對
print("mat_data:" , mat_data) # 打印一下.mat文件數據
# 遍歷.mat數據,字典
for i in mat_data:
print("keys:", i) # 打印鍵值
print(mat_data[i]) # 打印鍵的值
print("***********")
print("mat_data['data1_name']:", mat_data['data1_name'])
# 根據鍵,直接查看:mat_data['data1_name']: [[1 2 3 4 5 6]]
# 很明顯這是一個列表中的列表
# 索引0的話,就可以完全取出這個列表的數據,索引1會報錯哦!
print("mat_data['data1_name'][0]:", mat_data['data1_name'][0])
# mat_data['data1_name'][0]: [1 2 3 4 5 6]
# 遍歷這個列表,方式1
for i in mat_data['data1_name'][0]:
print(i)
# 遍歷這個列表,方式2
for i in range(len(mat_data['data1_name'][0])):
print(mat_data['data1_name'][0][i])
.mat文件中的數據組織格式如下:
鍵 | 值() |
__header__ | b'MATLAB 5.0 MAT-file Platform: nt, Created on: Thu Oct 17 14:50:56 2019' |
__version__ | 1.0 |
__globals__ | [] |
data1_name | [[1 2 3 4 5 6]] |
data2_name | [[6 5 4 3 2 1]] |
data3_name | [[1 3 5]] |
... | ... |
注意:
- .mat是一個字典,字典是沒有順序的。
- 不同的機器環境,__header__等鍵的值可能不同,不過沒有什麼影響
- data1_name鍵的值纔是之前保存的數據,每一個鍵對應的值都是一個嵌套列表,使用的時候需要注意
- 源碼可以在github上下載:https://github.com/