Matlab 集合运算(前身:剔除数组A中与数组B相同的元素)

文章目录

  • 一、函数(走的弯路)
  • 二、集合运算

一、函数(走的弯路)

首发于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时,按行拼接,但需行数相同。

你可能感兴趣的:(#,Matlab,matlab)