写在前面
Matlab中,删除数组A中数组B的元素。
思路1为:使用ismember函数判断B是否为A中元素,返回值为0/1逻辑值L,取A(~L)即为剔除B中的结果。
思路2为:使用setdiff函数,返回在A中有,而B中没有的值,结果向量将以升序排序返回。
1 ismember函数
clc;
clear;
A = [1, 2, 3, 4, 5, 6, 7, 0, 8, 9];
B = [2, 5, 9, 11, 23];
isB = ismember(A, B);
C = A(~isB);
结果如下:
A = 1 2 3 4 5 6 7 0 8 9
B = 2 5 9 11 23
C = 1 3 4 6 7 0 8
此时,数组C中的结果时按照A中的序列进行排列。
2 setdiff函数
clc;
clear;
A = [1, 2, 3, 4, 5, 6, 7, 0, 8, 9];
B = [2, 5, 9, 11, 23];
[D, ia] = setdiff(A, B);
E = A(sort(ia));
结果如下:
A =
1 2 3 4 5 6 7 0 8 9
B =
2 5 9 11 23
D =
0 1 3 4 6 7 8
ia =
8
1
3
4
6
7
9
E =
1 3 4 6 7 0 8
可以看到, D中的结果时按照升序的顺序进行排列。如果需要按照A中的序列进行排列的话,只需记录下每个元素的位置即可:代码[D, ia] = setdiff(A, B)
中的ia
记录的是每个元素的原始位置,再返回到A中提取即可得到按照A中顺序排列的E。