我目前在MATLAB中有一个名为“cols”的4 * 5057矩阵。我要做的是找到第一行的k个最小值,并将它们存储在一个名为“mins”的新矩阵中。
所以,假设k为3,我想要扫描整个第一行“cols”的函数,选出最小的3个值,并将整个列复制到新矩阵。
我理解如何完成最终部分,但它只是指定如何实际编写的函数不仅可以找到单个最小的数字,而且可以找到多个让我感到困惑的函数。
我已经阅读了关于min函数的MathsWorks页面以及其他一些搜索结果,但没有运气。
任何帮助将不胜感激!拜托,谢谢!
答案 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
- 列。