我有两个相同长度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。知道了这一点,我就能够与其他人打交道。
答案 0 :(得分:3)
您可以覆盖times
函数(see here),但手动操作更容易,如下所示:正常乘法,然后替换0
结果(对应于A
{1}}或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