Python讀寫mat文件操作指南(使用scipy.io)
在matlab中,數(shù)據(jù)可保存為mat文件,使用save和load命令可進(jìn)行讀寫操作。而在Python中,也可以對(duì)mat文件進(jìn)行讀寫。
一、由matlab向Python傳數(shù)據(jù)(Python讀取mat文件)
第一步:使用matlab創(chuàng)建變量并保存至mat文件
使用matlab分別創(chuàng)建數(shù)、數(shù)組、元胞數(shù)組等類型的變量,然后保存到mat文件中。
clear path = 'D:\temp\mydata.mat'; % 用于存放mat文件的路徑 n = 12; % 數(shù) s = 'Hello'; % 字符串 A = [1,2,3,4,5; 6,7,8,9,0]; % 數(shù)組 C = {'str1','str2','str3'; 'str4','str5','str6'}; % 元胞數(shù)組 save(path, 'n', 's', 'A', 'C'); % 保存上述變量
注意存放mat文件的文件夾必須存在,即要事先創(chuàng)建好,否則會(huì)報(bào)錯(cuò)。
保存后,來讀取一下其中的數(shù)據(jù):
可以確定上述變量已保存至mat文件。
第二部,使用Python讀取上述mat文件
使用scipy.io中的loadmat方法對(duì)mat文件進(jìn)行讀取。編輯代碼如下:
from scipy.io import loadmat path = r"D:\temp\mydata.mat" # mat文件路徑 data = loadmat(path) # 讀取mat文件 print(data.keys()) # 查看mat文件中包含的變量 Out: dict_keys(['__header__', '__version__', '__globals__', 'A', 'C', 'n', 's'])
可見讀取到的mat文件中包含變量n、s、A、C,與matlab保存的變量一致。
分別讀取這些變量:
from scipy.io import loadmat path = r"D:\temp\mydata.mat" # mat文件路徑 data = loadmat(path) n = data['n'] # 數(shù) s = data['s'] # 字符串 A = data['A'] # 數(shù)組 C = data['C'] # 元胞數(shù)組 print(n) print(s) print(A) print(C)
運(yùn)行后顯示結(jié)果如下:
[[12]]
['Hello']
[[1 2 3 4 5]
[6 7 8 9 0]]
[[array(['str1'], dtype='<U4') array(['str2'], dtype='<U4')
array(['str3'], dtype='<U4')]
[array(['str4'], dtype='<U4') array(['str5'], dtype='<U4')
array(['str6'], dtype='<U4')]]
與matlab創(chuàng)建的內(nèi)容一致,可見mat文件已被成功讀取。
但注意觀察讀取出來的各個(gè)變量的數(shù)據(jù)類型,發(fā)現(xiàn)均為“numpy.ndarray”類型。所以要想使用讀取出來的數(shù)據(jù),需要再次從ndarray中進(jìn)行讀取。
In: n0 = n[0][0] # 讀取單個(gè)數(shù) s0 = s[0] #讀取字符串 A0 = A[0][2] # 讀取數(shù)組中第1行第3個(gè)元素 C0 = C[0][1][0] # 讀取元胞數(shù)組中第1行第2個(gè)元素 print(n0) print(s0) print(A0) print(C0) Out: 12 Hello 3 str2
這樣就讀取出了指定的數(shù)據(jù)。
二、由Python向matlab傳數(shù)據(jù)(Python寫入mat文件)
第一步:使用Python創(chuàng)建變量并保存至mat文件
使用Python創(chuàng)建數(shù)、字符串、數(shù)組等類型的變量,然后使用scipy.io中的savemat方法在指定的路徑保存mat文件。
from numpy import array from scipy.io import savemat # 創(chuàng)建變量 path = r"D:\temp\mydata02.mat" # 路徑 num = 12 # 數(shù) str = 'abcde' # 字符串 list = array([1,2,3,4,5]) # 數(shù)組 # 構(gòu)造字典,用于保存變量 data = {} data.update({'num':num}) data.update({'str':str}) data.update({'list':list}) # 保存變量到mat文件 savemat(path, data)
注意,Python中的字典(Dictionary)和集合(Set)不能保存。
第二步:使用matlab讀取上述mat文件
打開matlab并讀取該mat文件,如下圖所示:
與Python中創(chuàng)建的內(nèi)容一致,讀取成功。
總結(jié)
到此這篇關(guān)于Python讀寫mat文件操作的文章就介紹到這了,更多相關(guān)Python讀寫mat文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?打印不帶括號(hào)的元組的實(shí)現(xiàn)
本文主要介紹了Python?打印不帶括號(hào)的元組,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Python 創(chuàng)建子進(jìn)程模塊subprocess詳解
這篇文章主要介紹了Python 創(chuàng)建子進(jìn)程模塊subprocess詳解,本文詳細(xì)講解了subprocess模塊的方法、參數(shù)、使用實(shí)例等,需要的朋友可以參考下2015-04-04Python爬蟲實(shí)現(xiàn)爬取下載網(wǎng)站數(shù)據(jù)的幾種方法示例
這篇文章主要為大家介紹了Python爬蟲實(shí)現(xiàn)爬取下載網(wǎng)站數(shù)據(jù)的幾種方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11python獲取異常信息exc_info和print_exc的使用
python通過sys.exc_info獲取異常信息,通過traceback.print_exc打印堆棧信息,包括錯(cuò)誤類型和錯(cuò)誤位置等信息,本文就來介紹一下具體用法,感興趣的可以了解一下2023-12-12Django權(quán)限設(shè)置及驗(yàn)證方式
這篇文章主要介紹了Django權(quán)限設(shè)置及驗(yàn)證方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python drop方法刪除列之inplace參數(shù)實(shí)例
這篇文章主要介紹了Python drop方法刪除列之inplace參數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06Jupyter notebook在mac:linux上的配置和遠(yuǎn)程訪問的方法
今天小編就為大家分享一篇關(guān)于Jupyter notebook在mac:linux上的配置和遠(yuǎn)程訪問的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01