文章目录
一、函数(走的弯路)
首发于2021-03-23
function data=msubmat(all,lack)
n=length(lack);
for i=1:n
all(find(all==lack(i)))=[];
end
data=all;
end
调用:
clc;clear
all=[1:36];
lack=[6 10 16 17 20 22 23 28 29 32 34 35];
data=msubmat(all,lack);
即使数组B中存在数组A中没有的元素也可。
补于2021-04-10
最近发现matlab自带了一些好用的集合运算函数,上面我要实现的功能,一行代码轻松搞定:
C = setdiff(all,lack);
二、集合运算
参考: https://blog.csdn.net/wangh0802/article/details/70142163
名称 | 代码 |
---|---|
交集 | C=intersect(A, B); |
并集 | C=union(A,B); |
唯一性 | C=unique(A); |
各自独有 | C = setxor(A,B); |
A独有 | C = setdiff(A,B); |
判断b是否是A的元素 | [tf, index] = ismember(A,b); |
判断集合是否排序 | issorted(A) ,可用sort 排序 |
把数组A和B按指定的维数d连接起来,d1列需列相同,2行 | cat(d,A,B) |
关于每个函数,都有另一种调用形式(以交集为例):[C,IA,IB] = intersect(A,B);
其中C便是A和B交集的结果,IA是C中元素在A中的索引,IB是C中元素在B中的位置。前一个优先。
表格中介绍的比较简单,下面详细描述一下各个函数的功能:
C=intersect(A, B);
将A和B中共有的元素存到C中。C=union(A,B);
将A和B中所有元素都存到C中,并且保持元素之间的互异性C=unique(A);
使A中的元素保持互异性,将结果存到C中,A不变。C = setxor(A,B);
返回A和B中各自独有的元素,保存在C中。意思是,A独有的+B独有的,元素的顺序应该是从小到大(这个不太确定)C = setdiff(A,B);
将A独有的元素保存在C中[tf, index] = ismember(A,b);
判断b是否是A的元素,返回 逻辑值和索引号issorted(A)
判断A是否是已经拍好序的,返回逻辑值A=sort(A);
将A拍个序,返回拍好序的数据cat(d,A,B)
把数组A和B按指定的维数d连接起来,d=1时,按列拼接,但需列数相同,d=2时,按行拼接,但需行数相同。