【问题标题】:How to set 0 x 0 = 1 in a element-wise array multiplication? MATLAB如何在逐元素数组乘法中设置 0 x 0 = 1? MATLAB
【发布时间】:2016-10-26 13:56:00
【问题描述】:

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

【问题讨论】:

    标签: arrays matlab multiplication elementwise-operations


    【解决方案1】:

    您可以覆盖times 函数(see here),但手动执行操作更容易,如下所示:正常相乘,然后替换0 结果(对应于AB等于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
    

    【讨论】:

    • 请注意,如果您不是绝对必须这样做,那么更改或重载标准函数通常是一个坏主意。 - 所以如果可能的话,一定要使用上面的“手动”实现。当然,如果需要,您可以在函数中实现它,只需将其称为 myTimes 而不是 times
    • 感谢您的回答。第一个真的很有创意!
    • @Mason 很高兴我能帮上忙
    猜你喜欢
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2019-12-03
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多