gpt4 book ai didi

matlab - 在matlab中排序并分配排名

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:55 25 4
gpt4 key购买 nike

您好,我需要对一个向量进行排序,并为相应的排序顺序指定一个排名。我正在使用排序函数 [sortedValue_X , X_Ranked] = sort(X,'descend');但问题是它为相同的值(零)分配不同的等级。即 x = [ 13 15 5 5 0 0 0 1 0 3] 并且我希望零采用相同的最后排名,即 6,五需要共享第三排名等。有什么建议吗?

最佳答案

语法 [sortedValues, sortedIndexes] = sort(x, 'descend') 不会像您描述的那样返回排名。它返回排序值的索引。如果您想使用一个数组的排序顺序来重新排列另一个数组,这将非常有用。

正如@user1860611 所建议的,unique 似乎做你想做的,使用第三个输出如下:

x = [ 13 15 5 5 0 0 0 1 0 3];
[~, ~, forwardRank] = unique(x);
%Returns
%forwardRank =
% 5 6 4 4 1 1 1 2 1 3

要获得所需的顺序(降序),您需要反转顺序,如下所示:

reverseRank = max(forwardRank) - forwardRank  + 1
%Returns
%reverseRank =
% 2 1 3 3 6 6 6 5 6 4

此时您可能已经完成了。但是您可能希望将它们排序为升序。这是 reverseRank 向量的重新排序,使其与原始 x 向量保持同步,这正是 sort 的第二个参数有意帮助。所以我们可以这样做:

[xSorted, ixsSort] = sort(x, 'descend');    %Perform a sort on x
reverseRankSorted = reverseRank(ixsSort); %Apply that sort to reverseRank

生成:

xSorted =           15    13     5     5     3     1     0     0     0     0
reverseRankSorted = 1 2 3 3 4 5 6 6 6 6

关于matlab - 在matlab中排序并分配排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14448759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com