Aproach 1:计算距离
如果您有统计工具箱:
Response = ~(pdist2(index, A));
要么:
Response = ~(pdist2(index, A, 'hamming'));
这是有效的,因为pdist2计算每对行之间的距离.等行具有距离0.逻辑否定〜对于那些行对给出1,否则为0.
方法2:将行减少为唯一的整数标签
这种方法在我的机器上更快:
[~,~,u] = unique([index; A], 'rows');
Response = bsxfun(@eq, u(1:G), u(G+1:end).');
它的工作原理是将行减少为唯一的整数标签(使用unique的第三个输出),并比较后者而不是前者.
对于您的尺寸值,我的计算机大约需要1秒钟:
clear
N = 19; M = 500; G = 524288;
index = randi(5,G,N); A = randi(5,M,N);
tic
[~,~,u] = unique([index; A], 'rows');
Response = bsxfun(@eq, u(1:G), u(G+1:end).');
toc
给
Elapsed time is 1.081043 seconds.