matlab - 为向量中的数字分配等级

标签 matlab vector

我希望能够根据数字的大小为向量中的数字分配一个等级,并创建一个包含这些等级的新向量。

例如,如果我有向量 [5, 2, 3, 1],我想返回 [4, 2, 3, 1](如5 是最大的数,1 是最小的数)。相同的数字最好共享平均排名(例如,如果两者相同且最低,则他们的平均排名应为 1.5)。

如何在 MATLAB 中实现这一点?

最佳答案

我建议您使用 unique 而不是排序:

[~, ~, ranking] = unique(x);

它也对向量进行排序,但将相同的值映射到相同的索引。这样原始向量中的相同元素获得相同的等级。例如,如果 x = [5 2 3 1 3],我们得到:

ranking =
   4   2   3   1   3

如果你想要一个“平均”排名,你可以使用 accumarray 结合从 uniquesort 获得的信息,所以请执行以下操作:

[~, ~, idx_u] = unique(x);
[~, idx_s] = sort(x);
mean_ranks = accumarray(idx_u(:), idx_s(idx_s), [], @mean);
ranking = mean_ranks(idx_u);

在我们的示例中,我们将得到:

ranking =
   1.0000
   2.0000
   3.5000
   5.0000
   3.5000

请注意,这两个值 3 的平均排名均为 3.5,因为它们共享排名 3 和 4。

关于matlab - 为向量中的数字分配等级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746759/

相关文章:

c++ - 获取指向 std::list 的第一个元素的指针

arrays - 给定一个都具有字段 foo 的结构数组,是否有一种简单的方法来获取 foo 值的数组?

matlab - 调试时仅针对特定循环索引

matlab - 在 Matlab 中哪里可以找到英特尔 MKL

c++ - vector Mat 的 opencv 切片

c++ - 从 .txt 文件读取数据并放入 vector 时,Linux 比 Windows 快得多。我将如何加速 Windows 来做同样的事情?

c++ - 通过用最后一个元素替换它然后删除它来从 vector 中删除一个元素是否会使过程更快?

python - 比较来自相同数据的 MATLAB 和 Python 图像之间的差异

matlab - 在箱线图上添加 latex 解释器

c++ - c++中的 vector 下标超出范围错误