我有两个长度相同的列向量 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。知道了这一点,我就能应付其他的了。
我有两个长度相同的列向量 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。知道了这一点,我就能应付其他的了。
您可以覆盖该times函数(请参阅此处),但更容易手动执行操作,如下所示:正常相乘,然后用修改后的值(如果和相等,否则)替换0结果(对应于A或B等于):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