如何在矩阵的给定行中找到所有最大的索引。 max(a(1,:))仅返回第一个最大值!
我希望所有元素的所有索引都是最大的(多个)
答案 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, :)))
第一种方式运行时没有提取相同的行两次(在我看来看起来好多了),第二种方式写的变量更少。