loadmat#
- scipy.io.matlab.loadmat(file_name, mdict=None, appendmat=True, *, spmatrix=True, **kwargs)[原始碼]#
載入 MATLAB 檔案。
- 參數:
- file_namestr
mat 檔名 (如果 appendmat==True,則不需要 .mat 副檔名)。也可以傳遞開啟的類檔案物件。
- mdictdict,選用
要將 matfile 變數插入其中的字典。
- appendmatbool,選用
如果給定的檔名結尾還沒有 .mat 副檔名,則為 True 以附加 .mat 副檔名。預設值為 True。
- spmatrixbool,選用 (預設值:True)
如果
True
,則傳回稀疏coo_matrix
。否則傳回coo_array
。僅與稀疏變數相關。- byte_orderstr 或 None,選用
預設值為 None,表示從 mat 檔案中猜測位元組順序。否則可以是 ('native', '=', 'little', '<', 'BIG', '>') 之一。
- mat_dtypebool,選用
如果為 True,則傳回與載入到 MATLAB 中相同的 dtype 的陣列 (而不是它們儲存時的 dtype)。
- squeeze_mebool,選用
是否壓縮單位矩陣維度。
- chars_as_stringsbool,選用
是否將字元陣列轉換為字串陣列。
- matlab_compatiblebool,選用
傳回的矩陣如同由 MATLAB 載入 (表示 squeeze_me=False, chars_as_strings=False, mat_dtype=True, struct_as_record=True)。
- struct_as_recordbool,選用
是否將 MATLAB 結構體載入為 NumPy 記錄陣列,或作為 dtype=object 的舊式 NumPy 陣列。將此旗標設定為 False 會複製 scipy 版本 0.7.x 的行為 (傳回 NumPy 物件陣列)。預設設定為 True,因為它允許更輕鬆地往返載入和儲存 MATLAB 檔案。
- verify_compressed_data_integritybool,選用
是否應檢查 MATLAB 檔案中壓縮序列的長度,以確保它們沒有超出我們的預期。建議啟用此選項 (預設值),因為 MATLAB 檔案中過長的壓縮序列通常表示檔案已發生某種程度的損壞。
- variable_namesNone 或 序列
如果為 None (預設值) - 讀取檔案中的所有變數。否則,variable_names 應該是字串序列,給出要從檔案中讀取的 MATLAB 變數的名稱。讀取器將跳過任何名稱不在這個序列中的變數,可能會節省一些讀取處理。
- simplify_cellsFalse,選用
如果為 True,則傳回簡化的字典結構 (如果 mat 檔案包含 cell 陣列,則很有用)。請注意,這僅影響結果的結構,而不影響其內容 (對於兩種輸出結構,其內容都相同)。如果為 True,這會自動將 struct_as_record 設定為 False,並將 squeeze_me 設定為 True,這是簡化 cell 所必需的。
- uint16_codecstr,選用
用於解碼字元的編解碼器,這些字元儲存為 uint16 值。預設值使用系統編碼,但可以手動設定為其他值,例如 'ascii'、'latin1' 和 'utf-8'。此參數僅適用於儲存為 v6 及更高版本的檔案,而不適用於儲存為 v4 的檔案。
- 傳回值:
- mat_dictdict
字典,其中變數名稱作為鍵,載入的矩陣作為值。
註解
支援 v4 (Level 1.0)、v6 和 v7 至 7.2 matfile。
您需要 HDF5 Python 函式庫才能讀取 MATLAB 7.3 格式的 mat 檔案。由於 SciPy 沒有提供,我們在這裡不實作 HDF5 / 7.3 介面。
範例
>>> from os.path import dirname, join as pjoin >>> import scipy.io as sio
從 tests/data 目錄取得範例 .mat 檔案的檔名。
>>> data_dir = pjoin(dirname(sio.__file__), 'matlab', 'tests', 'data') >>> mat_fname = pjoin(data_dir, 'testdouble_7.4_GLNX86.mat')
載入 .mat 檔案內容。
>>> mat_contents = sio.loadmat(mat_fname, spmatrix=False)
結果是一個字典,每個變數有一個鍵/值對
>>> sorted(mat_contents.keys()) ['__globals__', '__header__', '__version__', 'testdouble'] >>> mat_contents['testdouble'] array([[0. , 0.78539816, 1.57079633, 2.35619449, 3.14159265, 3.92699082, 4.71238898, 5.49778714, 6.28318531]])
預設情況下,SciPy 將 MATLAB 結構體讀取為結構化的 NumPy 陣列,其中 dtype 欄位的類型為 object,名稱對應於 MATLAB 結構體欄位名稱。可以透過設定選用參數 struct_as_record=False 來停用此功能。
取得包含名為 teststruct 的 MATLAB 結構體的範例 .mat 檔案的檔名,並載入內容。
>>> matstruct_fname = pjoin(data_dir, 'teststruct_7.4_GLNX86.mat') >>> matstruct_contents = sio.loadmat(matstruct_fname) >>> teststruct = matstruct_contents['teststruct'] >>> teststruct.dtype dtype([('stringfield', 'O'), ('doublefield', 'O'), ('complexfield', 'O')])
結構化陣列的大小是 MATLAB 結構體的大小,而不是任何特定欄位中元素的數量。形狀預設為 2-D,除非選用參數 squeeze_me=True,在這種情況下,所有長度為 1 的維度都會被移除。
>>> teststruct.size 1 >>> teststruct.shape (1, 1)
取得 MATLAB 結構體中第一個元素的 'stringfield'。
>>> teststruct[0, 0]['stringfield'] array(['Rats live on no evil star.'], dtype='<U26')
取得 'doublefield' 的第一個元素。
>>> teststruct['doublefield'][0, 0] array([[ 1.41421356, 2.71828183, 3.14159265]])
載入 MATLAB 結構體,擠壓掉長度為 1 的維度,並從 'complexfield' 取得項目。
>>> matstruct_squeezed = sio.loadmat(matstruct_fname, squeeze_me=True) >>> matstruct_squeezed['teststruct'].shape () >>> matstruct_squeezed['teststruct']['complexfield'].shape () >>> matstruct_squeezed['teststruct']['complexfield'].item() array([ 1.41421356+1.41421356j, 2.71828183+2.71828183j, 3.14159265+3.14159265j])