matlab集合操作

来源:互联网 发布:虚拟机优化显卡性能 编辑:程序博客网 时间:2024/06/05 18:32
C = intersect(A,B) -- 返回A和B的交集(相同元素)
%----C中的元素将会从小到大排序----%
如果A和B都是向量,那么返回A、B中的相同元素
如果A和B都是矩阵,intersect(A,B,'rows') 将返回A、B中的相同列
还有一种调用格式:[C,IA,IB] = intersect(A,B);
其中,C为A,B的交集;IA和IB分别为这些元素在A和B中的位置(Index)
------------------------------------------------------------
C = setxor(A,B) -- 返回A和B中互不相同的元素
类似的:[C,IA,IB] = intersect(A,B);
------------------------------------------------------------
C = union(A,B) -- 返回A和B的并集
类似的:[C,IA,IB] = union(A,B);
------------------------------------------------------------
C = setdiff(A,B) -- 返回A中那些不属于B的元素。
类似的:setdiff(A,B,'row') [C,IA] = setdiff(A,B)
------------------------------------------------------------
C = unique(A) -- 返回A中没有重复的元素
比如:
>>A=[1,2,1,4,6,3,7,5,9,4]; C = unique(A);
>>c=[1,2,4,5,6,7,9];
类似的:[B,I,J] = unique(A); I和J都是位置(Index)向量
B = A(I); A(J)=B;
------------------------------------------------------------
C = ismember(A,b) -- 判断b是否是A的元素。
ismember返回一个和A长度相同的向量,如果b与A中某个元素相等,

这个返回的向量中相应的位置就是1,其余位置为0 。

----------------------------------------------------------

1. intersect(A,B):集合交集

 A = [1 2 3 6]; B = [1 2 3 4 6 10 20];

>> c = intersect(A,B)

c =

     1     2     3     6


2. ismember :是否是集合中的元素

 [tf, loc] = ismember(A, S, ...)

set = [0 2 4 6 8 10 12 14 16 18 20];
a = reshape(1:5, [5 1])

a =
     1
     2
     3
     4
     5

ismember(a, set)
ans =
      0
     1
     0
     1
     0
set = [5 2 4 2 8 10 12 2 16 18 20 3];
[tf, index] = ismember(a, set);

index
index =
     0
     8
    12
     3
     1

 

3. issorted:判断集合是否排序 (相关函数,sort:排序)

A = [5 12 33 39 78 90 95 107 128 131];

issorted(A)
ans = 
     1


4. setdiff :集合差集

>> A=[1 2 3 4 5];
>> B=[0 1 5 7 2];
>> E = setdiff(A, B)    %求集合差A-B
E =
    3     4
A = magic(5);
B = magic(4);

[c, i] = setdiff(A(:), B(:));
c' =    17    18    19    20    21    22    23    24    25
i' =     1    10    14    18    19    23     2     6    15

 
5. setxor :集合异或(不在交集中的元素)

>> A=[1 2 3 4 5];
>> B=[0 1 5 7 2];
F = setxor(A, B)%求A与B交集的补集
F =
    0     3     4     7


6. union :两个集合的并


7. unique :返回向量作为一个集合所有元素(去掉相同元素)

A = [1 1 5 6 2 3 3 9 8 6 2 4]
A =
1     1     5     6     2     3     3     9     8     6     2     4

b = unique(A)

b =
      1     2     3     4     5     6     8     9

 

8. cat(d,A,B): 把数组A和B按指定的维数d连接起来

A =               B =
     1     2                   5     6
     3     4                   7     8

>> cat(1,A,B)

ans =

     1     2
     3     4
     5     6
     7     8

>> cat(2,A,B)

ans =

     1     2     5     6
     3     4     7     8

>> cat(3,A,B)

ans(:,:,1) =

     1     2
     3     4

ans(:,:,2) =

     5     6
     7     8

 

9. sort(A):将数组A中的元素按升序排列

A = [ 3 7 5
      0 4 2 ];

sort(A,1)  :列排序

ans =
     0     4     2
     3     7     5

sort(A,2) :行排序

ans =
     3     5     7
     0     2     4

 

10. strvcat: 竖向组合

t1 = 'first'; t2 = 'string'; t3 = 'matrix'; t4 = 'second';

S1 = strvcat(t1, t2, t3)          S2 = strvcat(t4, t2, t3)

S1 =                              S2 =
                                  
first                             second
string                            string
matrix                            matrix

S3 = strvcat(S1, S2)

S3 =
first
string 
matrix
second
string 
matrix

matlab中使用ismember判断一个集合是否为另一个的子集。返回一个逻辑矩阵,也可以返回index

help ismember

也可以使用intersect来判断,intersect(a,b)返回a和b的交集元素。

>> a=1:5,b=[1,3]

a =

     1     2     3     4     5


b =

     1     3

>> ismember(b,a)   %集合a在集合b中的是否相同元素,b集合中相应位置置1

ans =

     1     1

>>  ismember(a,b)   %集合b在集合a中的是否相同元素,a集合中相应位置上置1

ans =
   1   0   1   0   0

>> all(ismember(b,a))  %可以判断b是否是a的子集

ans =

     1

 >> all(ismember(a,b)) %可以判断a是否是b的子集

ans =
     0

>> intersect(a,b)

ans =

     1     3

>> isequal(sort(b),intersect(a,b))

ans =

     1


0 0
原创粉丝点击