0

我有一个整数值矩阵,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 列。

4

2 回答 2

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

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

于 2013-04-16T15:07:31.370 回答
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
于 2013-04-16T15:14:54.947 回答