2016-02-22 29 views
0

我有2个长度为200的向量,比如A和B;那么我发现数组A的每第二个百分点使用 A1 = prctile(A,[1:2:100],1); ,这样A1就是一个长度为50的数组。现在我想要找到A中每两个元素(即第二个和第四个百分点之间的A元素的平均值)内A的元素的平均值, B的元素。2个百分点之间的数组的平均元素

回答

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); 
+0

谢谢丹尼尔,这解决我的问题的一部分,我其实想获得对应于A和B的值,比如如果A的第2个和第4个百分点之内的元素[2,8,19]其中可能是长度为200的数组A中的第16,22和112个元素,那么我也需要向量B的第16个第22个和第112个元素的和。@Daniel – Sourangsu

+0

@Sourangsu:更新了答案。 – Daniel

+0

谢谢@丹尼尔 – Sourangsu