在Matlab

时间:2015-08-13 15:08:59

标签: arrays matlab sorting vector ranking

我打算将排名分配给数组的索引(而不是数组本身),并创建包含这些排名的第二个向量。

示例:

data: x=[ 3 7 2 0 5 2]
ranks: x'=[ 3 5 2 1 4 2]

在为索引分配排名后,我需要在循环的每次迭代中提取kth(从1开始)最小索引的相应值,直到某个条件满足为止。

例如,我需要第一次迭代中第一个最小索引的对应值,这意味着元素的对应值" 1"在等级向量中,等于元素" 0"在x向量中,虽然两个向量的索引保持不变(要清楚,x向量中的每个元素代表用户的某个属性,因此如果索引发生变化,我将失去对用户的跟踪)。 / p>

按照这个程序,在第二个循环中,不考虑第一个最小值,我需要提取第二个最小元素,依此类推。

1 个答案:

答案 0 :(得分:2)

这种问题已在很多场合被提出并得到解答,但我似乎找不到好的副本。

无论如何,您将使用sort向量上的rank的第二个输出来为您提供每个值在排序结果中出现的位置。具体来说,对于sort的第二个输出中的每个值,它会告诉您您必须抓取原始矢量中的哪个值以将其置于此相应位置以对数据进行排序。

然后,您可以使用此排序索引数据,以获得正确和理想的排序。

具体做法是:

x=[ 3 7 2 0 5 2];
ranks = [3 5 2 1 4 2];

[~,ind] = sort(ranks);
out = x(ind);

我们选择out

out =

     0     2     2     3     5     7

您可以验证我们是否在数据中提取符合ranks中所示排序顺序的数据。