在MATLAB中查找矩阵子集的最大值,同时保留完整矩阵的索引

时间:2011-01-28 21:42:14

标签: matlab matrix indexing max subset

目前,我可以使用以下代码找到矩阵C的最大值及其索引:

[max_C, imax] = max(C(:));
[ypeak, xpeak] = ind2sub(size(C),imax(1));

让我们调用矩阵C_sub

的子集

我想找到C_sub的最大值,但我也想知道C中该最大值的索引。

似乎它应该是一个容易出问题的问题,但它让我很难过。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

假设C_sub是由

创建的
C_sub = C(rows,cols);

其中rowscols是索引的向量。将这些rowscols向量保存在您可以重复使用的位置(如果您还没有)。

[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_subC的位置,则可以简单地将它们相加(并为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的子矩阵(例如,如果它重新排列行或列),则此代码可能无效。