1

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

我目前正在这样做:

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

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

您能否验证此程序或让我知道是否有更可靠的方法来执行此操作?

4

1 回答 1

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

然后每一列都是不同的组。

于 2016-05-11T09:45:52.710 回答