目前,我可以使用以下代码找到矩阵C
的最大值及其索引:
[max_C, imax] = max(C(:));
[ypeak, xpeak] = ind2sub(size(C),imax(1));
让我们调用矩阵C_sub
我想找到C_sub
的最大值,但我也想知道C
中该最大值的索引。
感谢您的帮助!
答案 0 :(得分:2)
假设C_sub
是由
C_sub = C(rows,cols);
其中rows
和cols
是索引的向量。将这些rows
和cols
向量保存在您可以重复使用的位置(如果您还没有)。
[max_C_sub, ind_C_sub] = max(C_sub(:));
[ypeak_sub, xpeak_sub] = ind2sub(size(C_sub), ind_C_sub);
xpeak = cols(xpeak_sub);
ypeak = rows(ypeak_sub);
或者,如果rows
和/或cols
是逻辑的向量而不是索引向量,则可以使用find
转换它们,然后按上述步骤继续。
rows_ind = find(rows_logical);
答案 1 :(得分:1)
如果您知道C_sub
中最大值的索引,并且您知道C_sub
中C
的位置,则可以简单地将它们相加(并为Matlab索引减去1)获取相对于C
的最大索引。
答案 2 :(得分:1)
我有一次类似的问题,所以我写了一个小实用程序来做到这一点。在文件交换中找到Min2 and Max2。这些工具允许您指定要搜索的给定矩阵的行和/或列的子集。
为自己做同样的事情。每次在MATLAB中需要一个工具时,请编写它。不久之后,您将建立一个适合您自己特殊需求的漂亮工具箱。当然,首先查看文件交换,因为很有可能您已经编写并发布了所需内容。
答案 3 :(得分:0)
怎么样:
mask = nan(size(C));
mask(C_sub_indices) = 1;
[max_C, imax] = max(C .* mask);
在该代码中,C_sub_indices
是应用于生成C
的{{1}}的索引表达式。如果C_sub
不是C_sub
的子矩阵(例如,如果它重新排列行或列),则此代码可能无效。