在matrix中查找给定的行

我在MATLAB有一个m乘n的matrix,说M。我有一个n元素的行向量,即一个乘n列matrix,说X.

我知道X在M的某个地方。我怎样才能findM的索引?

编辑:

gnovice的build议比我更简单:

 [~,indx]=ismember(X,M,'rows') indx = 3 

第一个解决scheme:

你可以很容易地使用findismember来做到这ismember 。 这是一个例子:

 M=magic(4); %#your matrix M = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 X=[9 7 6 12]; %#your row vector find(ismember(M,X),1) ans = 3 

在我得知ismember之前,我曾经这样做过:

 index = find(all(bsxfun(@eq, M, X), 2)); 

但是使用ismember(X, M, 'rows')绝对是可取的。

另一个解决scheme返回每个X的行索引

 find(sum(abs(M-ones(rows(M),1)*X),2)==0) 

此外,这个解决scheme可以很容易地适应find在X的阈值以内的行如下(如果数字噪声是一个问题)

 tolerance = 1e-16; %setting the desired tolerance find(sum(abs(M-ones(rows(M),1)*X),2)<tolerance) 

这是一个非循环版本。 只有M(你的matrix)不是很大,也就是说, n和m都很小。 X是你的行:

 function ind = findRow(M,X) tmp = M - repmat(X,size(M,1),1); ind = find(tmp,1); end 

如果M太大,可能会更快,迭代M行,并将每一行与您的向量进行比较。

@编辑:重命名variables以匹配问题中使用的名称。