没有循环MATLAB的矩阵运算

时间:2015-05-24 20:20:49

标签: matlab matrix xor

我有矩阵A(na*7)和矩阵B(nb*7)。 (例如A(16*7)和矩阵B(110*7)) A和B都有1和0作为上下文。

我想在A的每一行和B的每一行之间执行xor运算,并计算结果中的1的数量,并将其存储到另一个大小为na*nb的矩阵C.

我知道如何使用for循环,但我想知道是否有任何优雅的方法,没有for循环,以节省速度。

例如

如果A的大小为3*2B的大小为4*2,我想执行以下操作:

sum(xor(A(1,:),B(1,:)))

sum(xor(A(2,:),B(1,:)))

sum(xor(A(3,:),B(1,:)))

l--------------l

sum(xor(A(1,:),B(2,:)))

sum(xor(A(2,:),B(2,:)))

sum(xor(A(3,:),B(2,:)))

l--------------l

sum(xor(A(1,:),B(3,:)))

sum(xor(A(2,:),B(3,:)))

sum(xor(A(3,:),B(3,:)))

l--------------l


sum(xor(A(1,:),B(4,:)))

sum(xor(A(2,:),B(4,:)))

sum(xor(A(3,:),B(4,:)))

然后我希望每个结果都存储在C.每组3个结果是一行C

非常感谢

2 个答案:

答案 0 :(得分:1)

You could do it with bsxfun and permute:

C = sum(bsxfun(@xor, permute(A, [1 3 2]), permute(B, [3 1 2])), 3)

答案 1 :(得分:0)

You can do that using pdist2 with the 'hamming' option:

C = pdist2(A,B,'hamming')*size(A,2);