在MATLAB中,从较大的矩阵中提取行索引,该矩阵包含4 * 3矩阵的所有行元素

时间:2014-11-02 19:07:07

标签: matlab

例如,

A=[1 0 1; 1 0 0; 1 1 1; 0 0 0];
B=[0 0 0; 0 0 1; 0 1 0; 0 1 1; 1 0 0; 1 0 1; 1 1 0; 1 1 1];

我想要的只是查找B的行索引,其中包含A的整行。

2 个答案:

答案 0 :(得分:2)

ismember'rows'选项一起使用:

index = find(ismember(B, A, 'rows'));

您也可以申请pdist2

index = find(any(pdist2(A,B)==0, 1));

答案 1 :(得分:1)

您可以在此处使用 bsxfun -

index = find(any(all(bsxfun(@eq,A,permute(B,[3 2 1])),2),1))

或者使用 intersect 'rows'选项 -

[~,~,index] = intersect(A, B, 'rows')

或 -

[~,index] = intersect(B, A, 'rows')

setdiff 'rows'(可能有点复杂) -

[~,rem_index] = setdiff(B,A,'rows');
index = setdiff(1:size(B,1),rem_index)

修改:如果订单很重要,您可以修改之前的代码 -

[index,~] = find(squeeze(all(bsxfun(@eq,A,permute(B,[3 2 1])),2)).')

或 -

[~,~,index] = intersect(A, B, 'rows','stable')