2017-05-05 164 views
0

我有'M'个用户,它们对于每种情况具有N1和N2可能值的两个不同特性。 IE:A是指定每个用户的性别{'F','M'}(N1 = 2)的Mx1向量,并且B是指定用户居住的大陆的Mx1向量{'ASIA','非洲' ,'AMERICA'等}(N2 = 6)。 我想创建一个N1xN2(2 * 6)矩阵,该矩阵为我提供了每个性别和大陆组合的用户数量,而无需使用for循环。 我试过这段代码:Matlab中的二维逻辑矩阵

bsxfun(@eq,A,unique(A)')'*bsxfun(@eq,B,unique(B)')

但它不是我所需要的。

在此先感谢。 PS:我不需要数值的笛卡尔积,我需要一个矩阵来计算每个组合的元素。

+0

我不认为这是一个重复的。 Eric,你可以做下面的[〜,〜,ia] =唯一的(A); [〜,〜,ib] = unique(B); M = accumarray([ia,ib]);未尝试,但应该工作 –

+0

'M = accumarray([ia,ib])抛出错误:“使用accumarray错误输入参数不足。我已经更改为'M = accumarray(ia,ib)',但它只返回一个只有一个特征的向量。 – Eric

+0

对不起,认为snd参数是可选的。试试'accumarray([ia,ib],1)' –

回答

0

你需要accumarray这里:

[~,~,ia] = unique(A); 
[~,~,ib] = unique(B); 
M = accumarray([ia, ib], 1); 
+0

正是我需要的!非常感谢你 – Eric