Matlab中的布尔矩阵乘法

时间:2013-11-16 04:49:07

标签: matlab matrix boolean matrix-multiplication boolean-operations

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]

2 个答案:

答案 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运算,可以使用bsxfunany执行此操作,如下所示:

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);

我相信你能想到别人。