数组的平均元素在2百分位之间

时间:2016-02-22 10:52:42

标签: arrays matlab

我有2个长度为200的向量,比如A和B;然后我发现阵列A的每个第二百分位使用 A1 = prctile(A,[1:2:100],1); 所以A1是一个长度为50的数组。现在我想找到A的每个元素的平均值(即A的元素在第2和第4百分位数之间的平均值),并且平均相应的元素B.

1 个答案:

答案 0 :(得分:2)

我想以一个良好的表现解决这个问题的想法是创建一个'标签'向量,它为50个百分位定义的每个区域分配一个标签(数字在1到51之间)。

%Get the indices where each new percentile bin starts
[sortedA,indexA]=sort(A);
sortedB=B(indexA);
percentile_indices=ceil(prctile(1:numel(A), [1:2:100]));
label=zeros(size(A));
label([1,percentile_indices])=1;
%Convert this to a vector which assigns an index to each bin
label=cumsum(label);
%accumulate. Take the mean of all values with the same label.
prctileMeanA=accumarray(label(:),sortedA,[],@mean);
prctileMeanB=accumarray(label(:),sortedB,[],@mean);