【问题标题】:Find the maximum value of a matrix subset in MATLAB while preserving the indices of the full matrix在 MATLAB 中查找矩阵子集的最大值,同时保留完整矩阵的索引
【发布时间】:2011-06-17 12:39:30
【问题描述】:
目前,我可以使用以下代码找到矩阵 C 的最大值及其索引:
[max_C, imax] = max(C(:));
[ypeak, xpeak] = ind2sub(size(C),imax(1));
让我们调用矩阵的一个子集C_sub
我想找到C_sub 的最大值,但我也想知道该最大值在C 中的索引。
似乎这应该是一个简单的问题,但它让我很难过。
感谢您的帮助!
【问题讨论】:
标签:
matlab
matrix
indexing
max
subset
【解决方案1】:
假设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);
【解决方案2】:
如果您知道C_sub 中最大值的索引,并且您知道C_sub 在C 中的位置,您可以简单地将它们相加(并为Matlab 索引减去1)以获得相对于C 的最大值。
【解决方案3】:
我曾经遇到过类似的问题,所以我写了一个小工具来解决这个问题。在文件交换中找到Min2 and Max2。这些工具允许您指定要搜索的给定矩阵的行和/或列的子集。
为自己做同样的事情。每当您需要 MATLAB 中的工具时,就编写它。不久之后,您将建立一个适合您自己特殊需求的工具箱。当然,请先查看文件交换,因为很有可能您需要的内容已经编写并发布在那里。
【解决方案4】:
怎么样:
mask = nan(size(C));
mask(C_sub_indices) = 1;
[max_C, imax] = max(C .* mask);
在该代码中,C_sub_indices 是应用于生成C_sub 的C 的索引表达式。如果 C_sub 不是 C 的子矩阵(例如,如果它重新排列行或列),此代码可能不起作用。
【解决方案5】:
你也可以试试这个脚本:
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)