在Matlab中选择x个最小元素

时间:2013-04-16 14:58:30

标签: matlab matrix minimum

我有一个整数值矩阵,x轴代表不同的天数,y轴代表一天中的小时。并且在每个单元格中都有一个数字,表示一天中有多少小时符合当天正在进行的某些标准。这就是为什么我需要每小时计算一次,而不仅仅是在结束时。

整个问题是我必须挑选最低数量(最少对应)的5个最佳日子。因此,基本上在矩阵中,它意味着选择行中的5个最低数字记住列的索引,其中最小值为。 (我需要知道它发生在哪一天)。因为随着时间的推移,每次都可能是5天不同,所以对整个表进行排序会很麻烦。

我可以通过获取前5个数字使其工作变得非常丑陋,然后当我在路上找到较小的数字时,我会忘记5中的最大数字,并记住新的列的索引。然而,这个解决方案似乎非常草率。在Matlab中必须有一个更好的方法来解决这个问题。

任何可以让我的生活更轻松的想法,功能?

1 1 0 1 1 1 0 0 1 1

1 2 1 2 2 1 0 1 2 2

例如,在从1-10开始索引的这两行中,在第一行中它应该返回列 3,7,8和另外两个人并不真正关心哪一个。 在第二行,它应该返回第7,8,6,1,3列。

2 个答案:

答案 0 :(得分:2)

A = randi(60,100,2);
[min_val,index] = sort(A(:,2),'ascend');    
output = [A(index(1:5),1) A(index(1:5),2)];

这应该对你有帮助(我猜);

答案 1 :(得分:1)

可能最简单(但不是最有效)的方法之一是使用sort函数(也返回已排序的索引):

>> [~,index] = sort([1 1 0 1 1 1 0 0 1 1]);
>> index(1:5)
ans =

     3     7     8     1     2

>> [~,index] = sort([1 2 1 2 2 1 0 1 2 2]);
>> index(1:5)

ans =

     7     1     3     6     8