此列表是现实生活情况的最低范例
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%的索引的好方法是什么?
此任务的优秀数据结构是什么?
答案 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);
注意:最好使用函数length
或numel
代替size
来定义数组中元素的数量,因为函数size
有两个输出(行数和列数)你可以错误地使用行数(等于1)而不是列数。