找到矩阵每行中所有最大值的行/列

时间:2017-04-11 16:34:41

标签: matlab matrix

我希望每行中的搜索索引最大值/秒。如果row有多个最大值,那么我想保存两个索引。

例如:

X = [5 6 8
     1 2 3
     4 4 0];

我需要索引

inds = [1 3
        2 3
        3 1
        3 2];

我想使用函数max,但此函数只保存一个索引。

2 个答案:

答案 0 :(得分:3)

您可以使用max计算每行的最大值,然后使用maxbsxfun将每行中的元素与行eq进行比较。然后,您可以找到这些最大值的行/列位置。我们在那里使用转置(.')以确保我们得到您期望的输出的顺序。

[c,r] = find(bsxfun(@eq, d, max(d, [], 2)).')
output = [r,c];

答案 1 :(得分:0)

另一种方法是使用maxrepmat。 首先,使用

找到每行的最大值
rowMaximum=max(X,[],2);

然后复制最大值,使其与输入具有相同的尺寸,并将其与输入

进行比较
logicalMaximum=repmat(rowMaximum,1,size(X,2))==X;

你要做的最后一件事就是将这个逻辑阵列转换成你想要的索引

[columns,rows]=find(logicalMaximum);
result=[rows,columns];