MATLAB中如何查找矩阵内与指定向量相等的行并获取对应索引
MATLAB查找矩阵中与指定向量完全相等的行的实现方法
直接调用find函数时默认逐元素对比矩阵和向量,不会按行维度做全匹配,所以得不到预期结果。可使用以下两种方法实现需求,以下基于你给出的示例(向量A = [1 2 3],矩阵B = [5 6 8; 1 2 3; 9 6 5])演示:
方法1:调用ismember函数(最简便)
- 调用
ismember时指定'rows'参数,即可实现逐行全匹配,代码如下:
idx = find(ismember(B, A, 'rows'));
- 运行结果返回
2,和示例中匹配行的位置一致。
方法2:手动逐行全匹配
- 利用广播机制逐元素对比后,通过
all函数判断每行是否全部元素相等,代码如下:
idx = find(all(B == A, 2));
all(..., 2)表示沿矩阵的第二个维度(列方向)做与判断,仅返回所有元素都相等的行的逻辑掩码,再通过find转换为数值索引,结果和方法1完全一致。
注意事项
- 需保证待匹配向量的列数和矩阵的列数完全相同,否则会触发维度不匹配报错
- 如果待匹配向量是列向量,需先转置为行向量后再执行上述代码,转置操作为
A = A';
内容的提问来源于stack exchange,提问作者Pny
相关产品推荐
相关产品推荐

