1. 程式人生 > >python讀寫.mat檔案

python讀寫.mat檔案

背景

在做deeplearning過程中,使用caffe的框架,一般使用matlab來處理圖片(matlab處理圖片相對簡單,高效),用Python來生成需要的lmdb檔案以及做test產生結果。所以某些matlab從圖片處理得到的label資訊都會以.mat檔案供python讀取,同時也python產生的結果資訊也需要matlab來做進一步的處理(當然也可以使用txt,不嫌麻煩自己處理結構資訊)。

介紹

matlab和python間的資料傳輸一般是基於matlab的檔案格式.mat,python中numpy和scipy提供了一些函式,可以很好的對.mat檔案的資料進行讀寫和處理。
在這裡numpy作用是提供Array功能對映matlab裡面的Matrix,而scipy提供了兩個函式loadmat和savemat來讀寫.mat檔案。

示例


  
  1. import scipy.io as sio
  2. import numpy as np
  3. ###下面是講解python怎麼讀取.mat檔案以及怎麼處理得到的結果###
  4. load_fn = 'xxx.mat'
  5. load_data = sio.loadmat(load_fn)
  6. load_matrix = load_data[ 'matrix'] #假設檔案中存有字元變數是matrix,例如matlab中save(load_fn, 'matrix');當然可以儲存多個save(load_fn, 'matrix_x', 'matrix_y', ...);
  7. load_matrix_row = load_matrix[ 0
    ] #取了當時matlab中matrix的第一行,python中陣列行排列
  8. ###下面是講解python怎麼儲存.mat檔案供matlab程式使用###
  9. save_fn = 'xxx.mat'
  10. save_array = np.array([ 1, 2, 3, 4])
  11. sio.savemat(save_fn, { 'array': save_array}) #和上面的一樣,存在了array變數的第一行
  12. save_array_x = np.array([ 1, 2, 3, 4])
  13. save_array_y = np.array([ 5, 6, 7, 8])
  14. sio.savemat(save_fn, { 'array_x': save_array_x, 'array_x': save_array_x}) #同理,只是存入了兩個不同的變數供使用