【问题标题】:Extracting the corresponding value of a rank vector in Matlab在Matlab中提取秩向量的对应值
【发布时间】:2015-11-06 15:34:27
【问题描述】:

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

例子:

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

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

例如,我需要第一次迭代中第一个最小索引的对应值,即ranks向量中元素“1”的对应值,等于x向量中的元素“0”,而索引为两个向量都保持不变(需要明确的是,x 向量中的每个元素都代表用户的某个属性,因此如果索引发生变化,我将失去对用户的跟踪)。

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

【问题讨论】:

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

标签: arrays matlab sorting vector ranking


【解决方案1】:

这种问题在很多场合都被问过和回答过,但我似乎找不到好的重复。

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

然后您将使用此排序来索引您的数据以获得正确和所需的排序。

具体来说:

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 中看到的排序顺序。

【讨论】:

    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多