1

此列表是真实情况的最小示例

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

我排序

sorted_list = sort(list, 'descend');

我需要在list中获得 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% 的索引的好方法是什么?

这项任务的好的数据结构是什么?

4

1 回答 1

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);

注意:如果是数组,最好使用函数length或者定义元素的数量,因为函数有两个输出(行数和列数),你可能会错误地使用行数(等于1)来numel代替的列数。sizesize

于 2013-11-01T10:09:14.723 回答