求矩阵元素匹配条件的索引 - Matlab

时间:2015-03-11 20:21:31

标签: matlab matrix find matrix-indexing

给定矩阵Z(i,j)使得它映射到两个阵列X(i)和Y(j)。 我试图在一定范围内找到Z的元素(以及相应的X和Y)。

我现在正在使用逻辑索引执行以下操作。给出这个例子

 X = 1:5;
 Y = 1:5;
 Z =    [17    24     1     8    15
         23     5     6    14    16
          4     6    13    20    22
         10    12    19    21     3
         11    18    25     2     9]
 Z((X>1 & X<4),Y==3)

这样可以正常工作,但现在我希望找到此特定范围内返回值的最小值,

我使用

min(Z((X>1 & X<4),Y==3))

但是现在我如何找回最小值的相应X和Y值?由于我的逻辑索引返回一个数组,到目前为止我尝试的所有方法都返回了答案数组中min的索引,而不是原始的Z矩阵。

我无法使用

[row col] = find(Z==min(Z((X>1 & X<4),Y==3)))

由于重复。我有什么选择?

2 个答案:

答案 0 :(得分:5)

要检索原始索引,您必须在xy(我放入数组cX和{{1}中保留两个条件的索引记忆然后使用函数ind2sub

  

注意:由于cY代表行,因此您的代码有点混乱   并且x用于列,但我保留了相同的约定   答案。

在实践中,这给出了:

y

最佳,

答案 1 :(得分:4)

一种方法 -

%// Calculate all indices of the grid created with those two X-Y conditions
idx = bsxfun(@plus,(find(Y==3)-1)*size(Z,1),find((X>1 & X<4)).') %//'

%// Get the index corresponding to minimum from that grided Z
[~,min_idx] = min(Z(idx(:)))

%// Get corresponding X-Y indices by using indices calculated earlier
[indX,indY] = ind2sub([numel(X) numel(Y)],idx(min_idx))