天天看點

matlab的cell讀寫

cell存儲的内容與資料類型無關,對于大量的不規則資料(不僅僅指的"數")的操作很友善。 1、由txt讀入 經常遇到txt内儲存的資料類型不統一,格式各異,這時候按cell讀入資料就比較友善。

  1. fid = fopen(filename, 'r');  
  2. p = textscan(fid, '%s');  

其中filename是txt檔案的名稱,該操作将txt内的資料按字元串方式讀入變量p内。 假設txt記憶體放内容如下:

  1. name  age  native  
  2. Jim   23   U.S.  
  3. Li    25   P.R.C  
  4. Lucy  21   U.K.  

則調用上述程式得到的p的

  1. p =  
  2.   cell  
  3.     {12×1 cell}  

既p是隻有一個元素的cell,但是這個cell是一個12x1的列向量。 2、資料格式整理 通過“變量名+{index}”的方式可以通路第index個cell的内容,如下所示。

  1. >> p{1}  
  2. ans =  
  3.   12×1 cell array  
  4.     'name'  
  5.     'age'  
  6.     'native'  
  7.     'Jim'  
  8.     '23'  
  9.     'U.S.'  
  10.     'Li'  
  11.     '25'  
  12.     'P.R.C'  
  13.     'Lucy'  
  14.     '21'  
  15.     'U.K.'  

利用reshape函數整理資料

  1. % 根據中繼資料格式,整理為4行3列的矩陣  
  2. mat_p = reshape(p{1}, 3, 4)';  

整理後的資料格式如圖所示:

  1. mat_p =  
  2.   4×3 cell array  
  3.     'name'    'age'    'native'  
  4.     'Jim'     '23'     'U.S.'    
  5.     'Li'      '25'     'P.R.C'   
  6.     'Lucy'    '21'     'U.K.'    

由于reshape是優先對列進行排序,是以如果想要排列一個row行col列的資料,就要先排列為一個col行row列的矩陣後再進行轉置。 3、資料的輸出

  1. txtname = "D:\example_new.txt";  
  2. pfile = fopen(txtname, 'w');  
  3. for i = 1:4  
  4.     for j = 1:3  
  5.         fprintf(pfile, '%-5s', mat_p{i, j});  
  6.     end  
  7.     fprintf(pfile, '\r\n');  
  8. end  
  9. fclose(pfile);  

按照上面的程式對資料進行輸出,得到的救過如下圖所示:

  1. name age  native  
  2. Jim  23   U.S.   
  3. Li   25   P.R.C  
  4. Lucy 21   U.K.   

繼續閱讀