在矩阵中查找给定的行

时间:2011-06-02 02:51:39

标签: matlab

我在MATLAB中有一个m×n矩阵,比如M.我有一个n元素行向量,即一个n列矩阵,比如X.

我知道X在M中的某一行。我怎样才能在M中找到索引?

4 个答案:

答案 0 :(得分:65)

编辑:

gnovice的建议甚至比我的简单:

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

indx =

     3

第一个解决方案:

您可以使用findismember轻松完成此操作。这是一个例子:

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

答案 1 :(得分:7)

在我了解ismember之前,我曾经这样做过:

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

但使用ismember(X, M, 'rows')绝对是首选。

答案 2 :(得分:3)

为每次出现的X返回行索引的另一个解决方案是

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

此外,这个解决方案可以很容易地适用于查找X的阈值范围内的行,如下所示(如果数值噪声是一个问题)

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

答案 3 :(得分:1)

这是一个非循环版本。如果M(你的矩阵)不是很大,那么它是合适的。 n和m很小。 X是你的行:

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

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

@Edit:重命名变量以匹配问题中使用的名称。