0

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

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

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

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

任何帮助将不胜感激!谢谢,麻烦您了!

4

2 回答 2

0

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))
于 2013-05-05T08:34:36.453 回答
0

如果您需要保持列的顺序一致,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列。

于 2013-05-05T08:45:47.183 回答