Matlab中的布尔矩阵乘法

Pen*_*mmi 6 matlab boolean matrix matrix-multiplication boolean-operations

Matlab有布尔(有时称为逻辑或二进制)矩阵乘法函数吗?我特别在谈论通常用圆圈表示的东西,用圆圈表示布尔矩阵乘法:

cij = (ai1 & b1j) || (ai2 & b2j) || (ai3 & b3j)|| ... || (aik & bkj)
Run Code Online (Sandbox Code Playgroud)

我很难找到一个,现在假设一个不存在.如果是这种情况,是否有快速编写完成此任务的.m文件?

一个例子是:

[1 1 1;                [1 0 1;      [1 1 1
 1 0 1;   *circledot*   1 0 0;   =   1 1 1
 1 0 0]                 0 1 0]       1 0 1]
Run Code Online (Sandbox Code Playgroud)

cha*_*pjc 7

您可以让MATLAB执行标准矩阵乘法并将结果转换为logical:

b1 = [1,1,1;1,0,1;1,0,0]
b2 = [1,0,1;1,0,0;0,1,0]
bout = (b1*b2)>0 % or logical(b1*b2) as per natan's answer!

bout =

     1     1     1
     1     1     1
     1     0     1
Run Code Online (Sandbox Code Playgroud)

但是,如果你要忠实履行布尔矩阵乘法运算符的逻辑与或操作,你可以做到这一点bsxfun,并any如下:

bout = any(bsxfun(@and,permute(b2,[3 2 1]),permute(b1,[1 3 2])),3);
Run Code Online (Sandbox Code Playgroud)

这很好地模糊了这个过程,但它遵循公式.

快速测试数据: b1 = randi(2,M,N)-1; b2 = randi(2,N,M)-1;.