【问题标题】:Quantiles in MatlabMatlab中的分位数
【发布时间】:2015-01-30 21:00:53
【问题描述】:

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 等效的内容

谢谢!

【问题讨论】:

  • 你如何对它们进行分组?例如,如果x=[1 1 1 1 1 6]; 那么q 将是[1 1 1]
  • 请看帖子中的主题链接。
  • 0.51.2 怎么可能都在分位数组 1 中?

标签: matlab quantile


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    根据您如何定义“分位数组”,您可以使用:

    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(:))));
      

    但是,这些都不会返回您的示例中给出的结果:第一个给出[2 0 1 3 1],第二个给出[2 0 2 3 1],第三个给出[3 1 2 3 1]

    【讨论】:

    • 感谢您的回复。我不明白分位数组如何取值为 0。可能的分位数是 1,2,3
    • @Mayou 如果你回答我上面的问题,我也许可以提供更多帮助
    猜你喜欢
    • 2018-08-21
    • 2016-09-06
    • 2012-11-23
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多