Matlab 当有多个最大值时,沿一行的最大值
如何找到矩阵中给定行上最大的所有索引。 max(a(1,:))只返回第一个最大值Matlab 当有多个最大值时,沿一行的最大值,matlab,matrix,max,Matlab,Matrix,Max,如何找到矩阵中给定行上最大的所有索引。 max(a(1,:))只返回第一个最大值 我希望所有元素的所有索引都是最大的(多个)下面的解决方案将操作立即应用于整个矩阵,以防止任何循环 您可以计算每行的最大行数,然后使用eq(=)将每行中的每个值与其行最大值进行比较 a(row, :) == max(a(row, :)) 为了提高速度,我们可以通过调用bsxfun来实现这一点 a = [1 2 2; 4 4 3]; out = bsxfun(@eq, a, max(a, [], 2)) % 0
我希望所有元素的所有索引都是最大的(多个)下面的解决方案将操作立即应用于整个矩阵,以防止任何循环 您可以计算每行的最大行数,然后使用
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
max
返回最大元素的值,然后可以在数组中查找该值:
ind = find(a(1, :) == max(a(1, :)))
我认为这很简单
row = aMatrix(rowNumber, :)
find(row==max(row))
这显然浓缩为
find(aMatrix(rowNumber, :)==max(aMatrix(rowNumber, :)))
第一种方法运行时不需要两次提取同一行(我认为这看起来更好),第二种方法写入的变量更少。比find
解决方案快得多。到目前为止是最好的。谢谢,我想速度更快,但我接受了更简单的答案。我将投票支持你的答案,因为它可能有助于寻找答案的人speed@SridharThiagarajan欢迎你选择一个较低的答案,但至少要接受Mad Physician的答案,他在你选择的答案之前就发布了。如果你真的读过我的帖子,我会提到简单的方法。我已突出显示,以指示在何处。FWIW,我认为你的答案比我的更明确。@MadPhysicalWell教授可能会在你用bsxfun
交作业时开始提问,而你无法解释它的作用:)