Jon*_*nas 3 matlab vectorization percentile accumarray
我有以下代码,从数据集("DATA")计算百分位数非常慢,因为输入矩阵很大("数据"大约500.000长,10080个唯一值从"指数"分配) .
是否有可能/建议使这段代码更有效率?例如,我可以以某种方式省略for循环吗?
k = 1;
for i = 0:0.5:100; % in 0.5 fractile-steps
FRACTILE(:,k) = accumarray(Indices,Data,[], @(x) prctile(x,i));
k = k+1;
end
Run Code Online (Sandbox Code Playgroud)
prctile
使用相同的数据一次又一次地调用会导致性能问题.为每个数据集调用一次:
FRACTILE=cell2mat(accumarray(Indices,Data,[], @(x) {prctile(x,[0:0.5:100])}));
Run Code Online (Sandbox Code Playgroud)
让prctile
我们在一次通话中评估您的201百分位数的成本与原始代码的两次迭代大致相同.首先是因为prctile
这种方式更快,其次因为accumarray
现在只调用一次.
归档时间: |
|
查看次数: |
121 次 |
最近记录: |