如何在MATLAB中找到矩阵中给定数量的最小值?

时间:2013-05-05 08:30:07

标签: matlab matrix min

我目前在MATLAB中有一个名为“cols”的4 * 5057矩阵。我要做的是找到第一行的k个最小值,并将它们存储在一个名为“mins”的新矩阵中。

所以,假设k为3,我想要扫描整个第一行“cols”的函数,选出最小的3个值,并将整个列复制到新矩阵。

我理解如何完成最终部分,但它只是指定如何实际编写的函数不仅可以找到单个最小的数字,而且可以找到多个让我感到困惑的函数。

我已经阅读了关于min函数的MathsWorks页面以及其他一些搜索结果,但没有运气。

任何帮助将不胜感激!拜托,谢谢!

2 个答案:

答案 0 :(得分:0)

从向量中获取k最高或最低值的最简单方法是先sort,然后只取第一个(或最后一个)k值。

这不是最有效的算法,但它可能足够快你的目的。

  

我目前在MATLAB中有一个名为“cols”的4 * 5057矩阵。我要做的是找到第一行的k个最小值,并将它们存储在一个名为“mins”的新矩阵中。

试试这个:

v = cols(1, :);   % Get the first row of "cols"
v = sort(v);      % sort it    
mins = v(1:k);    % take the first k values
  

如果我对值进行排序,那只会影响矩阵的顶行吗?因为我还需要最小值以下的值,所以将它们混合起来并不是真的可取:/

试试这个:

mins = sortrows(cols.', 1).'
mins = mins(:, 1:k)

或者这个:

v = cols(1, :);         % Get the first row of "cols"
[v, ix] = sort(v);      % sort it, and remember the permutation
mins = cols(:, ix(1:k))

答案 1 :(得分:0)

如果您需要保持列的顺序一致,sortrows可以完成这项工作。由于sortrows对行进行操作,因此我们必须进行两次转置。扩展@nibot的答案,我们有

   col_sorted = sortrows(cols')';
   k_min = col_sorted(:,1:k);

e.g。

   cols =  
           0.8147    0.9134    0.2785    0.9649
           0.9058    0.6324    0.5469    0.1576
           0.1270    0.0975    0.9575    0.9706

   sortrows(cols')' = 
           0.2785    0.8147    0.9134    0.9649
           0.5469    0.9058    0.6324    0.1576
           0.9575    0.1270    0.0975    0.9706

然后,您只需要提取第一个k - 列。