繁体   English   中英

数组和矩阵之间的交集

[英]Intersection between a array and matrix

我有一个生成为A=randperm(1024,256)的数组和一个大小为(5,256)的矩阵B ,每行都在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,:)])));

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

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

这个怎么运作:

  1. ismember(B, A)是具有条目01的矩阵,指示B每个条目是否在A
  2. sum(..., 2)计算每行的总和。 因此,它给出了AB的每一行的条目数。
  3. cumsum计算该值的累加和。 因此,它的第n个条目给出了AB的前n行中条目的数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM