在Matlab中查找列向量中的一组数字的最小值

时间:2017-11-06 17:39:58

标签: matlab matrix minimum

我试图在作为矩阵一部分的列向量中找到一组数字的最小值。更具体地说,如果我有如下矩阵,

 1 2 3  4  2.7
 7 2 3  8  2.3
 5 2 3  9 12.5
10 4 5 12  1.1
11 4 5 13  5.6
14 5 6  7  1.2
15 5 6  8  0.5
16 5 6  9  3.4
17 5 6 12  6.8

然后,我希望输出如下,

 7 2 3  8 2.3
10 4 5 12 1.1
15 5 6  8 0.5

我考虑过根据第2列和第3列是否相同来划分矩阵,然后在每个子矩阵中找到第5列的最小值,但我无法有效地实现它。 (编辑:我试图做的,我首先将矩阵的第2列和第3列分开(比如A),然后我使用 unique 来获得重复行的出现次数,如下所示,

      A_dup = A(:,2:3)
      [A_uni,~,u_id] = unique(A_dup,'rows')
      num_occur = histc(u_id, unique(u_id)) 

向量' num_occur'会告诉我如何在子矩阵中划分矩阵A.这并不多,但在此之后我被困住了。)

如果有更好的方法,我会很高兴知道这一点。

1 个答案:

答案 0 :(得分:1)

使用sortrows根据第5列的元素对矩阵进行排序,并获取已排序元素的索引。找到新矩阵的第2列和第3列的unique行的行下标。使用这些行下标和前面找到的索引,可以从原始矩阵中保留行下标。 Sort他们维持秩序。使用已排序的新行下标来获取所需的结果。

[req, idxA] = sortrows(A, 5);           
[~, idxtmpA] = unique(req(:,2:3), 'rows');
req = A(sort(idxA(idxtmpA)), :);