如果我用MATLAB使用負載的功能,我通常最終會做這樣的事情:Matlab的:加載的文件
temp = load('filename.mat');
realData = temp.VarName;
clear temp
或
realData = load('filename.mat');
realData = realData.VarName;
任何的這種方法superiour給對方,尤其是在內存使用方面?還是有更直接的方法來避免這個臨時結構?
THX 托馬斯
如果我用MATLAB使用負載的功能,我通常最終會做這樣的事情:Matlab的:加載的文件
temp = load('filename.mat');
realData = temp.VarName;
clear temp
或
realData = load('filename.mat');
realData = realData.VarName;
任何的這種方法superiour給對方,尤其是在內存使用方面?還是有更直接的方法來避免這個臨時結構?
THX 托馬斯
好吧,如果你只是做load('filename.mat');
,所有的變量在當前範圍內結束。
雖然我懷疑有任何有意義的記憶成本。 Matlab使用copy-on-write。
如果你知道你從matfile只需要特定的變量,你可以做
realData = load('filename.mat', 'VarName');
關於LOAD命令的詳細信息,請參見Matlab documentation。
但這也會創建一個結構。唯一的例外是該結構只有realData.VarName而不是可能的多個字段。 – Thomas 2010-09-07 09:14:46
然後只需要執行'load('filename.mat','VarName');'並且變量VarName將在當前作用域中結束,而不是在結構中。 – groovingandi 2010-09-07 10:02:55
您可能需要使用「IMPORTDATA」嘗試命令:
szFilePath = 'c:\dirName\myData.mat';
myData = importdata(szFilePath);
這避免了變量入範圍隱式放置在負載與無輸出參數一起使用,以及不必要的分配,從 - 結構命令。如Oli所述,懶惰拷貝(寫時複製)行爲意味着內存考慮事項是沒有意義的。
從視圖IMPORTDATA的維修/可讀性點有幾個優點:
我正在使用MATLAB R2010a。
但是,如果你想在一個函數中使用load(),那麼它們不需要在工作空間中結束?! 另外在第一種情況下,是不是暫時沒有使用變量的2x尺寸? – Thomas 2010-09-07 09:03:31
@Thomas:對不起,我更正了我的修改。他們最終在當前的範圍內。不,沒有兩倍的內存使用,因爲在幕後,'realData'和'temp.varName'將指向相同的數據結構(直到數據被實際修改)。 – 2010-09-07 09:21:19