Matlab是否有布尔(有时称为逻辑或二进制)矩阵乘法函数?我特别在谈论通常用圆圈表示的东西,用圆圈表示布尔矩阵乘法:
cij = (ai1 & b1j) || (ai2 & b2j) || (ai3 & b3j)|| ... || (aik & bkj)
我很难找到一个,现在假设一个不存在。如果是这种情况,是否可以快速编写完成此任务的.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]
答案 0 :(得分: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
然而,如果您想忠实地执行布尔矩阵乘法运算符的逻辑AND-OR运算,可以使用bsxfun
和any
执行此操作,如下所示:
bout = any(bsxfun(@and,permute(b2,[3 2 1]),permute(b1,[1 3 2])),3);
这很好地模糊了这个过程,但它遵循公式。
快速测试数据:b1 = randi(2,M,N)-1; b2 = randi(2,N,M)-1;
。
答案 1 :(得分:3)
矩阵乘法是一系列乘加运算。如果输入都是1和0,则这种操作的结果将是“零或大于零”。因此,在产品中设置每个值> 0到1将解决您的问题。例如:
booleanResult =(结果> 0);
或者
booleanResult = logical(result);
我相信你能想到别人。