目前,我可以使用以下代码找到矩阵的最大值C
及其索引:
[max_C, imax] = max(C(:));
[ypeak, xpeak] = ind2sub(size(C),imax(1));
让我们调用矩阵的一个子集C_sub
我想找到 的最大值C_sub
,但我也想知道该最大值在 中的索引C
。
似乎这应该是一个简单的问题,但它让我难住了。
谢谢你的帮助!
假设它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
and/orcols
是逻辑向量而不是索引向量,则可以使用 转换它们find
,然后按上述方式进行。
rows_ind = find(rows_logical);
如果您知道 in 中的最大值的索引C_sub
,并且您知道C_sub
within的位置C
,您可以简单地将它们相加(并为 Matlab 索引减去 1)以获得相对于 的最大值的索引C
。
我曾经遇到过类似的问题,所以我写了一个小工具来解决这个问题。在文件交换中找到Min2 和 Max2 。这些工具允许您指定要搜索的给定矩阵的行和/或列的子集。
为自己做同样的事情。每当您需要 MATLAB 中的工具时,就编写它。不久之后,您将建立一个适合您自己特殊需求的工具箱。当然,首先查看文件交换,因为很有可能您需要的内容已经编写并发布在那里。
You can also try this script:
A=magic(5)
[x,y]=find(A==max(max(A))) %index maximum of the matrix A
A_max=A(x,y)
[x1,y1]=find(A==min(max(A))) %index minimum of the matrix A
A_min=A(x1,y1)
关于什么:
mask = nan(size(C));
mask(C_sub_indices) = 1;
[max_C, imax] = max(C .* mask);
在该代码中,C_sub_indices
是应用于C
该 生成的索引表达式C_sub
。如果不是(例如,如果它重新排列行或列)C_sub
的子矩阵,则此代码可能不起作用。C