【发布时间】:2011-06-02 02:51:38
【问题描述】:
我在MATLAB 中有一个 m x n 矩阵,比如 M。我有一个 n 元素行向量,即一个 x n 列矩阵,比如 X。
我知道 X 是 M 中某处的一行。如何找到 M 中的索引?
【问题讨论】:
标签: matlab
我在MATLAB 中有一个 m x n 矩阵,比如 M。我有一个 n 元素行向量,即一个 x n 列矩阵,比如 X。
我知道 X 是 M 中某处的一行。如何找到 M 中的索引?
【问题讨论】:
标签: matlab
【讨论】:
'rows' 参数稍微修改您的解决方案,以消除对 FIND 的需求:[~,index] = ismember(X,M,'rows')
在我知道ismember之前,我曾经这样做过:
index = find(all(bsxfun(@eq, M, X), 2));
但是使用ismember(X, M, 'rows') 绝对是更可取的。
【讨论】:
另一种为每次出现 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)
【讨论】:
这是一个非循环版本。仅当 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:重命名变量以匹配问题中使用的名称。
【讨论】: