【问题标题】:How to find a given number of minimum values in a matrix in MATLAB? [duplicate]如何在MATLAB中的矩阵中找到给定数量的最小值? [复制]
【发布时间】:2013-04-29 06:21:29
【问题描述】:

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

所以,假设 k 为 3,我希望该函数扫描“cols”的整个第一行,挑选出最小的 3 个值,然后将该整列复制到新矩阵中。

我知道如何做结尾部分,但它只是指定如何实际编写函数,该函数不仅找到单个最小数字,而且找到多个让我难过的数字。

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

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

【问题讨论】:

  • 我需要找到第一行的 k 个最小值,然后我将使用它们下面的值(在同一列中)。

标签: matlab matrix min


【解决方案1】:

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

这不是最有效的算法,但对于您的目的来说它可能足够快。

我目前在 MATLAB 中有一个 4 * 5057 矩阵,称为“cols”。我要做的是找到第一行的 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))

【讨论】:

  • 如果我对值进行了排序,那只会影响矩阵的第一行吗?因为我也需要低于最小值的值,所以将它们混合起来并不是最好的:/
  • 啊,我错过了关于“整个专栏”的部分。在答案中添加了一些代码来解决这个问题。
  • 非常感谢!我现在已经开始工作了:D
【解决方案2】:

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

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

例如

   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-columns。

【讨论】:

  • 我只是偶然发现了这一点! :D 我使用的代码几乎完全相同。非常感谢:)
猜你喜欢
  • 2015-01-14
  • 2011-02-07
  • 1970-01-01
  • 2019-05-21
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
相关资源
最近更新 更多