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