0

我有一个矩阵:

A = [ 4567 345; 45 6787;第3345章 87 6787]

和一个向量

乙 = [ 4567; 45; 8976]

我想比较 A 和 B 并在 A 中删除所有没有至少一个数字的行,这些数字包含在矩阵 B 中。

结果矩阵将是:

[ 4567   345;

  45    6787 ]

这是代码:

idx=ismember(A(:,1:2),B); %%create a logical index in order to see if A includes elements of B

n = length(A)
for i=1:n
   if (idx(i,1)==0)& (idx(i,2)==0)
       A(i,:)=[];
   end
end 

但是我收到了这个错误:

Index of element to remove exceeds matrix dimensions.

我尝试了另一种解决方案,但我得到了同样的错误。

n = length(A)
for i=1:n
     if (find(idx(i,1)==0))& (find(idx(i,2)==0))
     A(i,:)=[];
     end
end 
4

2 回答 2

2

在此逻辑索引任务中不需要循环:

ismember(A,B)
ans =
     1     0
     1     0
     0     0
     0     0

您所需要的只是将这些行与至少一个匹配项保持为any(...,2)

idx = any(ismember(A,B),2)
idx =
     1
     1
     0
     0

结果:

A(idx,:)
ans =
        4567         345
          45        6787

错误是由于您的循环从运行1:n但您从矩阵中删除行使其有效短于n.

于 2013-07-28T17:47:30.217 回答
0
A = [ 4567 345; 45 6787; 3345 NaN; 87 6787]
B = [ 8976; 45; 4567 ]
z = sum(ismember(A,B)');
NewMatrix=[];
for i = 1:length(z)
    if z(i)>= 1
        newMatrix = A(i,:);
        NewMatrix=[NewMatrix;newMatrix];
    end
end
NewMatrix
于 2013-07-28T23:49:05.437 回答