无循环矩阵运算 MATLAB

Matrix operations without loop MATLAB

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

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

我知道如何使用 for 循环来做到这一点,但我想知道是否有任何优雅的方法可以不用 for 循环来节省速度。

例如

如果 A 的大小是 3*2 并且 B 的大小是 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的一行

非常感谢

你可以用 bsxfun and permute:

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

您可以使用 pdist2'hamming' 选项来做到这一点:

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