如何在Matlab中比较两个不同维度的矩阵并获得相等行的频率?

时间:2014-08-06 13:13:39

标签: matlab matrix comparison

我在维度A的Matlab中有矩阵hxk,维度B的矩阵yxk。我想构建一个维度C的向量yx1列在每行j B(j,:) A中出现的次数{{1}}。

3 个答案:

答案 0 :(得分:9)

如果您正在寻找完美匹配,请使用bsxfun -

的解决方案
C = squeeze(sum(all(bsxfun(@eq,A,permute(B,[3 2 1])),2),1))

答案 1 :(得分:3)

您也可以使用pdist2(来自统计工具箱):

C = sum(pdist2(A, B)==0);

答案 2 :(得分:2)

使用ismemberaccumarray

的另一种解决方案
A=[1 2 3; 4 5 6; 7 8 9; 1 2 3; 4 5 6; 10 11 12; 7 8 9];
B=[1 2 3; 10 11 12; 3 4 5; 7 8 9];
[uB,aB,cB]=unique(B,'rows');
[~,LocB] = ismember(A,uB,'rows');
C = accumarray(nonzeros(LocB),1,[size(B,1),1]);
C=C(cB);

返回

C =

 2     1     0     2

或者一些疯狂的编码,对于大多数情况来说似乎更快:

[u,v,w]=unique([B;A],'rows');
wB=w(1:size(B,1));
wA=w(size(B,1)+1:end);
C=accumarray(wA,1,[numel(v),1]);
C=C(wB);