0
我有2个长度为200的向量,比如A和B;那么我发现数组A的每第二个百分点使用 A1 = prctile(A,[1:2:100],1); ,这样A1就是一个长度为50的数组。现在我想要找到A中每两个元素(即第二个和第四个百分点之间的A元素的平均值)内A的元素的平均值, B的元素。2个百分点之间的数组的平均元素
我有2个长度为200的向量,比如A和B;那么我发现数组A的每第二个百分点使用 A1 = prctile(A,[1:2:100],1); ,这样A1就是一个长度为50的数组。现在我想要找到A中每两个元素(即第二个和第四个百分点之间的A元素的平均值)内A的元素的平均值, B的元素。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);
谢谢丹尼尔,这解决我的问题的一部分,我其实想获得对应于A和B的值,比如如果A的第2个和第4个百分点之内的元素[2,8,19]其中可能是长度为200的数组A中的第16,22和112个元素,那么我也需要向量B的第16个第22个和第112个元素的和。@Daniel – Sourangsu
@Sourangsu:更新了答案。 – Daniel
谢谢@丹尼尔 – Sourangsu