[英]Intersection between a array and matrix
我有一个生成为A=randperm(1024,256)
的数组和一个大小为(5,256)的矩阵B
,每行都在matlab中使用randperm(1024,256)
生成。 我想找到A
和B(1,:)
之间的公数计数,然后是A
和B(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));
这个怎么运作:
ismember(B, A)
是具有条目0
或1
的矩阵,指示B
每个条目是否在A
。 sum(..., 2)
计算每行的总和。 因此,它给出了A
中B
的每一行的条目数。 cumsum
计算该值的累加和。 因此,它的第n
个条目给出了A
中B
的前n
行中条目的数量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.