我在MATLAB
中有一个m×n矩阵,比如M.我有一个n元素行向量,即一个n列矩阵,比如X.
我知道X在M中的某一行。我怎样才能在M中找到索引?
答案 0 :(得分:65)
gnovice的建议甚至比我的简单:
[~,indx]=ismember(X,M,'rows')
indx =
3
您可以使用find
和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
答案 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:重命名变量以匹配问题中使用的名称。