2017-04-11 112 views
2

我希望每行的搜索索引的最大值为/ s。如果行具有多个最大值,那么我想保存两个索引。在矩阵的每一行中查找所有最大值的行/列

例如:

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

我需要指标

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

我想使用的功能max不过这个功能只保存一个索引。

回答

3

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

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

另一种方式来做到这一点,是使用maxrepmat。 首先你会发现使用

rowMaximum=max(X,[],2); 

最大的每一行,那么你复制的最大值,使得它具有相同的尺寸作为输入,并将其与输入

logicalMaximum=repmat(rowMaximum,1,size(X,2))==X; 

你的最后一件事想要做的就是将这个逻辑阵列到您期望的索引

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

值得注意的极端加速是'bsxfun'提供超过'repmat'的'在[这种粗放答案]所示eq'(HTT电话号码://stackoverflow.com/a/29719681/670206) – Suever