2016-10-26 4 views
1

私は同じ長さnの2つの列ベクトルAとBを持っています。 -1、0と1要素ごとの配列の乗算で0 x 0 = 1を設定するにはどうすればよいですか? MATLAB

私はBの要素単位でAを掛けたとき、私は1x1のために期待する結果を得ることを期待、1X:両ベクターで

、唯一の3つの可能なその要素の値があります(-1)および(-1)x(-1)となる。 0が乗算での用語であるとき

しかし、ここでは、私は次のような結果を取得したいのですが:

は0x0 = 1

は0x1 = -1

0X(-1 )= -1

要素毎の乗算は、MATLABで簡単です:

times(A,B) or A.*B

操作のために定義済みの結果を設定する方法、たとえば0x0 = 1を知りたい。これを知って、私は他の人に対処することができます。

答えて

3

あなたはtimes機能(see here)をオーバーライドすることもできますが、次のように手動で操作を行うには簡単です:乗算通常は、その後、変更された値で(Aまたは0に等しいBのいずれかに該当する)0結果を置き換えます( 1ABが等しく、そうでない場合-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); 

これは通常、あなたが絶対に持っていない場合の標準的な機能を変更したり、過負荷にするBAD IDEAです

A = 
    1 -1  0  1  1  0  1 
B = 
    1  1 -1 -1  0  0  1 
result = 
    1 -1 -1 -1 -1  1  1 
+2

注意を与えます。 - 可能であれば、上記の「手動」実装のようなものに間違いなく行ってください。もちろん、必要に応じて関数内に実装することもできます。単に 'times'ではなく' myTimes'と呼ぶだけです。 –

+0

答えをありがとう。最初のものは本当に創造的です! –

+1

@Mason Glad私は助けることができました –

関連する問題