【发布时间】:2014-08-06 13:13:39
【问题描述】:
我在 Matlab 中有矩阵 A,维度为 hxk,矩阵 B,维度为 yxk。我想构造一个维度为yx1 的向量C 在每一行中列出j 多少次B(j,:) 出现在A 中。
【问题讨论】:
标签: matlab matrix comparison
我在 Matlab 中有矩阵 A,维度为 hxk,矩阵 B,维度为 yxk。我想构造一个维度为yx1 的向量C 在每一行中列出j 多少次B(j,:) 出现在A 中。
【问题讨论】:
标签: matlab matrix comparison
如果您正在寻找完美匹配,bsxfun 的一种解决方案-
C = squeeze(sum(all(bsxfun(@eq,A,permute(B,[3 2 1])),2),1))
【讨论】:
您也可以使用pdist2(来自统计工具箱):
C = sum(pdist2(A, B)==0);
【讨论】:
使用ismember 和accumarray 的另一种解决方案
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);
【讨论】:
B中有重复条目的问题。
numel(v)