我希望每行的搜索索引的最大值为/ s。如果行具有多个最大值,那么我想保存两个索引。在矩阵的每一行中查找所有最大值的行/列
例如:
X = [5 6 8
1 2 3
4 4 0];
我需要指标
inds = [1 3
2 3
3 1
3 2];
我想使用的功能max
不过这个功能只保存一个索引。
我希望每行的搜索索引的最大值为/ s。如果行具有多个最大值,那么我想保存两个索引。在矩阵的每一行中查找所有最大值的行/列
例如:
X = [5 6 8
1 2 3
4 4 0];
我需要指标
inds = [1 3
2 3
3 1
3 2];
我想使用的功能max
不过这个功能只保存一个索引。
您可以使用max
来计算每行的最大值,然后使用bsxfun
和eq
比较每行中的元素与它的行向max
。然后你可以找到这些最大值的行/列位置。我们在那里使用转置(.'
)以确保获得您期望的输出的排序。
[c,r] = find(bsxfun(@eq, d, max(d, [], 2)).')
output = [r,c];
另一种方式来做到这一点,是使用max
和repmat
。 首先你会发现使用
rowMaximum=max(X,[],2);
最大的每一行,那么你复制的最大值,使得它具有相同的尺寸作为输入,并将其与输入
logicalMaximum=repmat(rowMaximum,1,size(X,2))==X;
你的最后一件事想要做的就是将这个逻辑阵列到您期望的索引
[columns,rows]=find(logicalMaximum);
result=[rows,columns];
值得注意的极端加速是'bsxfun'提供超过'repmat'的'在[这种粗放答案]所示eq'(HTT电话号码://stackoverflow.com/a/29719681/670206) – Suever