我有一个生成为A=randperm(1024,256)
的数组和一个大小为B
的数组(5,256),每个行都使用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,:)])));
答案 0 :(得分:2)
我认为这可以满足您的需求:
result = cumsum(sum(ismember(B, A), 2));
工作原理:
ismember(B, A)
是一个包含条目0
或1
的矩阵,表明B
的每个条目是否都在A
。sum(..., 2)
计算每行的总和。因此,它会给出B
中每行A
的条目数。cumsum
计算累积总和。因此,其n
个条目提供了n
中B
的{{1}}行的A
行中的条目数。