当有多个最大值时,最大行数

时间:2016-08-08 17:15:17

标签: matlab matrix max

如何在矩阵的给定行中找到所有最大的索引。 max(a(1,:))仅返回第一个最大值!

我希望所有元素的所有索引都是最大的(多个)

3 个答案:

答案 0 :(得分:5)

以下解决方案立即将操作应用于整个矩阵,从而无需进行任何循环。

您可以计算每行的最大行数,然后使用eq==将每行中的每个值与行的最大值进行比较。

a(row, :) == max(a(row, :))

对于速度,我们可以通过调用bsxfun来包装它。

a = [1 2 2; 4 4 3];
out = bsxfun(@eq, a, max(a, [], 2))

%   0     1     1
%   1     1     0

这产生一个逻辑矩阵,其中1表示它是给定行的最大值。如果您想要索引,可以将find应用于此以获取行和列。

[rows, cols] = find(out)

如果需要,您可以使用accumarray按行对其进行分组

accumarray(row, col, [], @(x){x})

%   out{1} =
%    
%        2
%        3
%    
%   out{2} =
%    
%        1
%        2

答案 1 :(得分:3)

max返回最大元素的值,然后您可以在数组中find

ind = find(a(1, :) == max(a(1, :)))

答案 2 :(得分:1)

我认为它就像

一样简单
row = aMatrix(rowNumber, :)
find(row==max(row))

明显凝结成

find(aMatrix(rowNumber, :)==max(aMatrix(rowNumber, :)))

第一种方式运行时没有提取相同的行两次(在我看来看起来好多了),第二种方式写的变量更少。