我有一个矩阵:
A = [4567 345; 45 6787; 3345 NaN; 87 6787]
和矢量
B = [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
答案 0 :(得分: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
。
答案 1 :(得分: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