【问题标题】:Quantile sorting in MatlabMatlab中的分位数排序
【发布时间】:2016-09-06 13:04:36
【问题描述】:

我有一个n-by-1 向量,其中n = 20000。我想对这个向量中的数据做一个十分位排序,基本上就是用对应的十分位替换每个元素的值。

我目前正在这样做:

deciles = quantile(X,9);
X = discretize(X,[-inf deciles inf]);

X 是我的数据数组。我这样做是因为我想要 10 组数据,每组数据的数量相同。

您能否验证此过程或让我知道是否有更可靠的方法来验证?

【问题讨论】:

  • 您可以自己轻松地验证这一点 - 只需构建一个小样本 X 并查看您是否得到正确的结果。我会立即建议的一件事是不要就地执行此操作。即不要覆盖X,而是创建一个新变量,比如X_dec,以便您可以将其与X 进行比较,这将有助于您自我验证您的程序
  • 是的,我已经这样做了,它适用于小样本。但有时当与庞大的数据集一起使用时,有些事情可能会出错!只是想听听其他人的意见,这是否有意义,或者是否有其他方法可以做到!但是感谢您的评论!

标签: matlab statistics quantile discretization


【解决方案1】:

您可以通过创建已知大小的简单数据轻松验证您所拥有的数据是否正确。

nGroups = 10;
nPerGroup = 10000;

X = linspace(0, 1, nGroups * nPerGroup);

deciles = quantile(X, nGroups - 1);
X = discretize(X,[-inf deciles inf]);

nPerGroup = arrayfun(@(x)sum(X == x), 1:nGroups)
%// 10000   10000   10000   10000   10000   10000   10000   10000   10000   10000

另一种选择是对您的数据进行排序,然后重新调整形状,以便列数是所需组的数量。这种方法将仅依赖于内置函数

X = linspace(0, 1, nGroups * nPerGroup);
Y = reshape(sort(X), [], nGroups);

每一列都是不同的组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多