我正在尝试找出执行此操作的最佳方法,最好是在 Octave 中,但我会在紧要关头使用 NumPy。
假设我有一个 axb 矩阵 M。如果我想要任何给定列中最大值的行索引,[x, xi] = max(M)
将为我返回这些索引作为行向量。
例如,如果 M 是:
1 3 5
2 9 1
7 2 4
以上将返回行向量[3 2 1]
作为xi
;每行的索引向量,其中包含该列的最大值。这很好。我想要这个行向量。
但是如果我想要前 n 个这样的行向量怎么办?
[编辑以更好地解释这一点]
对于上面的示例,第一个这样的向量将是上面的 [3, 2, 1]
,(每个给定列具有最高值的行的索引)。第二个这样的向量是 [2 1 3]
,(每列具有第二高值的行的索引)。
我可以迭代地完成它,但我的实际矩阵有数千行,所以这在计算上会非常昂贵。我找不到任何明显的矩阵效用函数来帮助我实现这一目标。有什么建议吗?
最佳答案
我假设您的意思是您想要矩阵中的 n 个最大值。在这种情况下,Get the indices of the n largest elements in a matrix几乎与此问题相同,除了 OP 想要整个矩阵的最大值,而不是单个最大值。这应该可以满足您的需求
n = 2; % The depth to get
M = [ 1, 3, 5; ...
2, 9, 1; ...
7, 2, 4 ]; % The matrix to look at
[m, mi] = sort(M, 'descend'); % Sort the to access them
x = m(1:n, :) % Get the values
xi = mi(1:n, :) % and the indices
关于matlab - 矩阵中的前 n 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17170522/