Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 当有多个最大值时,沿一行的最大值_Matlab_Matrix_Max - Fatal编程技术网

Matlab 当有多个最大值时,沿一行的最大值

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

如何找到矩阵中给定行上最大的所有索引。 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     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
交作业时开始提问,而你无法解释它的作用:)