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)
您可以让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;
.