生成每个数据点所属的分位数组是否有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
谢谢!
答案 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)
根据您定义"分位数组"的方式,您可以使用:
如果"分位数组"表示q
中有多少值小于x
:
result = sum(bsxfun(@gt, x(:).', q(:)));
如果"分位数组"表示q
中有多少值小于或等于x
:
result = sum(bsxfun(@ge, x(:).', q(:)));
如果"分位数组"表示q
中与x
中的每个值最接近的值的索引:
[~, result] = min(abs(bsxfun(@minus, x(:).', q(:))));
这些都不会返回示例中给出的结果:第一个给出[2 0 1 3 1]
,第二个[2 0 2 3 1]
,第三个[3 1 2 3 1]
。