数组和矩阵之间的交集

时间:2018-04-13 13:48:32

标签: matlab

我有一个生成为A=randperm(1024,256)的数组和一个大小为B的数组(5,256),每个行都使用matlab中的randperm(1024,256)生成。我想查找AB(1,:)之间的公共数字,然后是AB(1:2,:)之间的公共数字,同样高达B(1:5,:)。我试着这样做,如下所示,它可以工作,但我希望它为U = 20和更高的数字,在这种情况下,编写代码就像我所做的那样混乱。任何人都可以建议更好的代码或技术。

N=1024;
k=256;
U=5;
A=randperm(N,K);

    for u=1:U
        user(u,:)=randperm(N,k); 
    end

i(1)=numel(intersect(A,user(1,:)));

i(2)=numel(intersect(A,([user(1,:),user(2,:)])));

i(3)=numel(intersect(A,([user(1,:),user(2,:),user(3,:)])));

i(4)=numel(intersect(A,([user(1,:),user(2,:),user(3,:),user(4,:)])));

i(5)=numel(intersect(A,([user(1,:),user(2,:),user(3,:),user(4,:),user(5,:)])));

1 个答案:

答案 0 :(得分:2)

我认为这可以满足您的需求:

result = cumsum(sum(ismember(B, A), 2));

工作原理:

  1. ismember(B, A)是一个包含条目01的矩阵,表明B的每个条目是否都在A
  2. sum(..., 2)计算每行的总和。因此,它会给出B中每行A的条目数。
  3. cumsum计算累积总和。因此,其n个条目提供了nB的{​​{1}}行的A行中的条目数。