在Matlab中的分位数

时间:2014-12-02 14:59:35

标签: matlab quantile

生成每个数据点所属的分位数组是否有matlab函数或简单方法?

示例:

x = [4 0.5 3 5 1.2];
q = quantile(x, 3);

ans =

    1.0250    3.0000    4.2500

所以我想看到以下内容:

result = [2 1 2 3 1]; % The quantile groups

换句话说,我在matlab中寻找等效的thread

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以遍历循环中的所有n分位数并使用逻辑索引来查找分位数

n = 3;
q = quantile(x,n);
y = ones(size(x));
for k=2:n
    y(x>=q(k)) = k;
end

答案 1 :(得分:0)

根据您定义"分位数组"的方式,您可以使用:

  1. 如果"分位数组"表示q中有多少值小于x

    result = sum(bsxfun(@gt, x(:).', q(:)));
    
  2. 如果"分位数组"表示q中有多少值小于或等于x

    result = sum(bsxfun(@ge, x(:).', q(:)));
    
  3. 如果"分位数组"表示q中与x中的每个值最接近的值的索引:

    [~, result] = min(abs(bsxfun(@minus, x(:).', q(:))));
    
  4. 这些都不会返回示例中给出的结果:第一个给出[2 0 1 3 1],第二个[2 0 2 3 1],第三个[3 1 2 3 1]