爲什麼索引到數據集數組這麼慢?進入dataset.subsref函數的峯值顯示數據集的所有列都存儲在單元格數組中。然而,單元索引比數據集索引要快得多,它只是索引到引擎蓋下的單元陣列中。我的猜測是,這與MATLAB OOP的一些開銷有關。任何想法如何加快這一點?統計信息工具箱的數據集數組索引非常慢
%% Using R2011a, PCWIN64
feature accel off; % turn off JIT
dat = (1:1e6)';
dat2 = repmat({'abc'}, 1e6, 1);
celldat = {dat dat2};
ds = dataset(dat, dat2);
N = 1e2;
tic;
for j = 1:N
tmp = celldat{2};
end
toc;
tic;
for j = 1:N
tmp2 = ds.dat2; % 2.778sec spent on line 262 of dataset.subsref
end
toc;
feature accel on; % turn JIT back on
Elapsed time is 0.000165 seconds.
Elapsed time is 2.778995 seconds.
編輯:我已經更新的例子更喜歡我所看到的問題。在dataset.subsref - 「b = a.data {varIndex};」的第262行花費了大量時間。這對我來說很奇怪,因爲它是一個簡單的細胞去引用。我想知道是否有一個OOP技巧可以讓我在沒有奇怪開銷的情況下索引「a.data」。
編輯2:根據安德魯的建議,我已經將此作爲一個錯誤提交給MatWorks。如果我從他們那裏聽到任何信息,將更新
EDIT3: Matlab的迴應,並表示,他們意識到了這個問題現在將修復它在未來的版本。他們指出,這個問題是針對單元陣列的,如果可能的話儘量避免它們。
它在MATLAB profiler下看起來像什麼? –
+1 Richie的評論是任何Matlab性能問題的最佳答案。 –
超過90%的時間花費在dataset.subsref的第262行上,這是奇怪的b/c,它是一個簡單的單元格取消引用。不幸的是,我給出的例子太簡單了,無法顯示。我會更新一個更現實的例子。 –