1

我有两个长度相同的列向量 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。知道了这一点,我就能应付其他的了。

4

1 回答 1

3

您可以覆盖该times函数(请参阅此处),但更容易手动执行操作,如下所示:正常相乘,然后用修改后的值(如果和相等,否则)替换0结果(对应于AB等于):01AB-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
于 2016-10-26T14:04:28.727 回答