2017-07-24 68 views
1

如何將包含在MAT文件中的變量「var」加載到不同的名稱下?如何從已保存的工作區中重命名變量?

我有幾個MAT文件,其中包含一個名稱始終相同的變量,但值當然不同。我想通過循環加載它們,而不必在每次迭代中重寫它們,所以我需要在加載它們之前更改它們的名稱。那可能嗎?

在保存的工作區內重命名變量然後加載它也是一個解決方案。這種其他策略可能嗎?

+0

所以你會重新命名所有的變量(「變種」),別的每個循環? var_1,var_2,var_3等等......所以你可以在以後重用這些變量? – Flynn

+0

是的!這個想法是不會在第二次迭代中重寫第一次迭代中的加載變量(它們都具有相同的名稱) – Peter

+1

嗯,我不認爲這是好的做法,但可以使用eval來設置每個變量名稱,就像我上面提到的那樣,根據你的迭代。比如當我= 1時,你會做eval(['var _',num2str(i),'= var']); 因爲所有的變量代表相同的東西,我會考慮連接它們或創建一個單元格,如下面的@gnovice提到的。 – Flynn

回答

3

相反,有很多改名的變量(如var_1var_2,等等),我會建議存儲在某種形式的陣列(numericcell,或structure)您加載的數據亂丟您的工作空間。這通常會使組織和處理數據變得更容易。這裏的數據加載到一個結構陣列,使用3- MAT文件,每個存儲變量var具有不同值的示例(1,2和3):

fileNames = {'file1.mat'; 'file2.mat'; 'file3.mat'}; 
for iFile = 1:numel(fileNames) 
    structArray(iFile) = load(fileNames{iFile}, 'var'); 
end 

而且structArray將是結構的陣列在該領域var包含數據元素:

>> structArray 

structArray = 
    1×3 struct array with fields: 
    var 

現在,可以提取字段值,並把它們放在一個數值數組,像這樣:

>> numArray = [structArray.var] 

numArray = 
    1  2  3 

或者,如果它們是不同的大小或數據類型,將它們放置在一個單元陣列:

>> cellArray = {structArray.var} 

cellArray = 
    1×3 cell array 
    [1] [2] [3] 
相關問題