【发布时间】:2016-08-11 23:34:15
【问题描述】:
我有 400 万 x 15 的表格。我正在应用这样的蒙版:
curData = data(curCodeMask & curEstDateMask,:);
掩码通常一次提取大约 5 条记录。我正在遍历数据中的 686,000 个唯一标识符并应用一系列函数。
我刚刚运行了分析器,发现这条线占用了 71.6% 的时间来运行这个函数。这看起来很奇怪。运行 1000 个标识符需要 3 分钟,这意味着我无法在合理的时间内通过 686,000 个。
有任何加快流程的建议或解释为何此面具难以应用?
编辑
test = repmat(cell2table(repmat({'AAA'},1,15)),4000000,1);
test([5500,60000,292404,290014,205802],1) = {'BBB'};
mask = strcmp(test.Var1,{'BBB'});
tic;test(mask,:);toc;
tic;test(find(mask),:);toc;
第一行耗时 0.078991 秒,第二行耗时 0.004005 秒。我现在正在更改我的代码以使用 find 。任何人都可以解释为什么逻辑索引需要这么长时间?
【问题讨论】:
-
您要求 MATLAB 对每次循环迭代的 800 万个元素进行逻辑比较,显然这会增加很多时间。如果没有任何关于您正在做什么操作以及为什么选择这样做的上下文,那么实际上不可能回答您的问题。至少我会建议提供minimal reproducible example,我还要说这可能更适用于Code Review
-
只是提供了一个很好的例子。结果很困惑。