排序的好方法,并在Matlab中保存原始列表的索引

时间:2013-11-01 10:00:25

标签: list matlab sorting

此列表是现实生活情况的最低范例

list = [0.2 0.1 0.3 0.4 0.7 0.5 0.6 0.9 1.0];

我把它排序

sorted_list = sort(list, 'descend');

我需要在列表中获得10%具有最高值的索引。

我的尝试

% Take the amount of indexes to 10%
limit = size(sorted_list);
size = limit(1);
limit = ceil(0.1*size);

% find the index numbers from the original list which corresponds to the highest indexes
for j = 1:limit
    value = sorted_list(j);
    for k = 1:size
        if value == list(k)
            refine_set(j) = k;
            % here much resources used, should be able stop if matching
            % early, so should be able to stop the for-loop somehow
            % I do not want to use while-loop, since in some cases, this would cause
            % infinite loop
        end;
    end;
end;

我开始认为必须有更好的方法来做到这一点。 函数 max 似乎没有一个参数可以让我获取那些代表最大值10%的索引。

获取原始列表中代表列表中最大值10%的索引的好方法是什么?

此任务的优秀数据结构是什么?

1 个答案:

答案 0 :(得分:2)

Matlab具有两个输出值的排序函数:

[B,IX] = sort(A,...)

IX是接收排序数组所需的索引的排列。

结果您需要以下算法:

[sorted_list, IX] = sort(list, 'descend');
limit = length(sorted_list);
limit = ceil(0.1 * limit);
refine_set = IX(1:limit);

注意:最好使用函数lengthnumel代替size来定义数组中元素的数量,因为函数size有两个输出(行数和列数)你可以错误地使用行数(等于1)而不是列数。