【发布时间】:2016-05-05 20:44:01
【问题描述】:
我有以下代码从数据集(“DATA”)计算百分位数非常慢,因为输入矩阵很大(“Data”长约 500.000,从“指数”)。
是否有可能/建议使这段代码更高效?例如,我可以以某种方式省略 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
【问题讨论】:
-
请注意:
accumarray无论如何都是循环的包装器。 -
Fractile 似乎是一个矩阵,你到底想做什么?通常,如果您想摆脱 for 循环,可以尝试将其设为矩阵运算,matlab 非常好(但请记住内存限制)
-
是的,它确实是一个矩阵。我正在为每个唯一的 10080 索引存储单独的百分位数结果 (0:0.5:100)。
标签: matlab vectorization percentile accumarray