给定矩阵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)))
由于重复。我有什么选择?
答案 0 :(得分:5)
要检索原始索引,您必须在x
和y
(我放入数组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))