2010-09-07 41 views
0

如果我用MATLAB使用負載的功能,我通常最終會做這樣的事情:Matlab的:加載的文件

temp = load('filename.mat'); 
realData = temp.VarName; 
clear temp 

realData = load('filename.mat'); 
realData = realData.VarName; 

任何的這種方法superiour給對方,尤其是在內存使用方面?還是有更直接的方法來避免這個臨時結構?

THX 托馬斯

回答

0

好吧,如果你只是做load('filename.mat');,所有的變量在當前範圍內結束。

雖然我懷疑有任何有意義的記憶成本。 Matlab使用copy-on-write。

+0

但是,如果你想在一個函數中使用load(),那麼它們不需要在工作空間中結束?! 另外在第一種情況下,是不是暫時沒有使用變量的2x尺寸? – Thomas 2010-09-07 09:03:31

+2

@Thomas:對不起,我更正了我的修改。他們最終在當前的範圍內。不,沒有兩倍的內存使用,因爲在幕後,'realData'和'temp.varName'將指向相同的數據結構(直到數據被實際修改)。 – 2010-09-07 09:21:19

6

如果你知道你從matfile只需要特定的變量,你可以做

realData = load('filename.mat', 'VarName'); 

關於LOAD命令的詳細信息,請參見Matlab documentation

+0

但這也會創建一個結構。唯一的例外是該結構只有realData.VarName而不是可能的多個字段。 – Thomas 2010-09-07 09:14:46

+3

然後只需要執行'load('filename.mat','VarName');'並且變量VarName將在當前作用域中結束,而不是在結構中。 – groovingandi 2010-09-07 10:02:55

0

您可能需要使用「IMPORTDATA」嘗試命令:

szFilePath = 'c:\dirName\myData.mat'; 
    myData = importdata(szFilePath); 

這避免了變量入範圍隱式放置在負載與無輸出參數一起使用,以及不必要的分配,從 - 結構命令。如Oli所述,懶惰拷貝(寫時複製)行爲意味着內存考慮事項是沒有意義的。

從視圖IMPORTDATA的維修/可讀性點有幾個優點:

  1. 明確命名了在工作區中的文件創建什麼功能做更清楚的變量。
  2. 刪除從結構體賦值操作的必要性使分散注意力和不相關的操作從源文件中刪除。

我正在使用MATLAB R2010a。

相關問題