1

同じ長さ n の 2 つの列ベクトル A と B があります。

どちらのベクトルでも、要素に使用できる値は -1、0、および 1 の 3 つだけです。

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関数をオーバーライドすることもできます( here を参照) が、次のように操作を手動で行う方が簡単です: 通常どおりに乗算し、0結果 (いずれかAまたはB等しい0) を変更された値 ( 1ifABare equal および-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;

次のように 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 に答える