如何在逐元素乘法中设置0 x 0 = 1? MATLAB

时间:2016-10-26 13:56:01

标签: arrays matlab multiplying elementwise-operations

我有两个相同长度n的列向量A和B.

在两个向量中,它们的元素只有3个可能的值:-1,0和1。

当我将A乘以B元素时,我希望得到1x1,1x(-1)和(-1)x(-1)的期望结果。

但是,这里,当0是乘法中的一个项时,我希望得到以下结果:

0x0 = 1

0x1 = -1

0x(-1)= -1

在MATLAB中,元素乘法很容易:

times(A,B) or A.*B

我想知道如何为操作设置预定义的结果,比如0x0 = 1。知道了这一点,我就能够与其他人打交道。

1 个答案:

答案 0 :(得分:3)

您可以覆盖times函数(see here),但手动操作更容易,如下所示:正常乘法,然后替换0结果(对应于A {1}}或B等于0),修改后的值{1如果AB相等,否则-1

A = [1 -1 0 1 1 0 1];
B = [1 1 -1 -1 0 0 1];
result = A.*B;
ind = result==0;
result(ind) = 2*(A(ind)==B(ind))-1;

您也可以在一行中执行以下操作,但效率较低:

result = A.*B + ~(A&B).*(2*(A==B)-1);

这给出了

A =
     1    -1     0     1     1     0     1
B =
     1     1    -1    -1     0     0     1
result =
     1    -1    -1    -1    -1     1     1