2012-02-01 50 views
7

假設我有一個.mat文件,它帶有幾個相同結構的實例,每個實例都有一個不同的變量名。從一個.mat文件加載一個變量到一個不同名稱的變量

我想處理文件中找到的每個實例(我發現使用whos('-file' ...)。我希望load可以讓我指定一個變量的目的地名稱,這樣我就不必擔心碰撞(因此我不必編寫自修改代碼la eval)。

蠻力的方式來做到這一點似乎是創建一個輔助函數,使用變量與希望不與.MAT內容相沖突的名字,確實是這樣的:

  1. 是否在whos該文件獲取包含的名稱。
  2. 迭代加載每個包含的結構。
  3. 使用eval將加載的結構分配到單元數組(其中一列數組包含.mat文件的結構名稱以及一個與.mat文件中每個結構的實際內容對應的列)。

有沒有更好的方法來完成同樣的事情?

回答

8

當然你可以!只需使用帶有輸出參數的load即可。

x = 1; 
save foo; 

ls = load('foo.mat'); 
ls.x 
+0

漂亮的單元陣列。我反覆查看'load'手冊頁,想知道''結構數組'應該是什麼樣的返回值?「現在我明白了! – jhfrontz 2012-02-02 04:33:22

4

可以load在MAT文件中的數據放入結構

ws = load('matlab.mat'); 

結構ws領域將在MAT文件中的變量。然後,你甚至可以有結構

ws{1}=load('savedWorkSpace_1.mat'); 
ws{2}=load('savedWorkSpace_2.mat'); 

>> x = 1; 
>> save ws_1; 
>> x = 2; 
>> y = 1; 
>> save ws_2 
>> clear 
>> ws{1} = load('ws_1.mat') 
>> ws{2} = load('ws_2.mat') 
>> ws{1}.x 
    x = 1 
>> ws{2}.x 
    x = 2 
相關問題