如何在逐元素数组乘法中设置 0 x 0 = 1?软件
How to set 0 x 0 = 1 in a element-wise array multiplication? MATLAB
我有两个长度相同的列向量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
函数 (see here),但手动操作更容易,如下所示:正常相乘,然后替换 0
结果(对应于A
或 B
等于 0
)和修改后的值(1
如果 A
和 B
相等且 -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
我有两个长度相同的列向量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
函数 (see here),但手动操作更容易,如下所示:正常相乘,然后替换 0
结果(对应于A
或 B
等于 0
)和修改后的值(1
如果 A
和 B
相等且 -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