2017-03-17 12 views
2

私はテンソルの論理要素単位opertaionsを実行しようとしていますが、それはそうです「と」キーワードは論理を実行している間「または」キーワードは、論理的またはを行い、 :トーチ要素ごとの論理演算および/または

a = torch.zeros(3) 
    a[1] = 1      -- a will be [1,0,0] 
    b = torch.ones(3) 
    b[3] = 0      -- b will be [1,1,0] 
    c = torch.eq(a,1) and torch.eq(b,1) 
    d = torch.eq(a,1) or torch.eq(b,1) 

それはそれらがあるためだけの両方 bが1に等しい位置において1はまた、I Dは[1,1,0]になることを期待していることが理にかなっているので、私はC [1,0,0]なることを期待していました位置は、またはbは1に等しい。私の驚きには、結果は全く反対である。 説明はありますか? Luaのドキュメントによると

+0

警告:答えによれば、この方法はTensorsの要素ごとの論理演算では絶対に間違っています。 – kerrigan

答えて

1

オペレータと、それが偽の場合、最初の引数を返します。それ以外の場合は、 2番目の引数を返します。演算子がfalseでない場合、最初の 引数を返します。それ以外の場合は、2番目の 引数を返します。

この場合、その動作は「偶然」と同じように起こります。 or演算子を適用している間に、and演算子と最初の引数(Tensor b)を適用しながら、2番目の引数(Tensor a)を返します。また、テンソルaは要素単位の論理に対応し、テンソルbは要素単位の論理またはに対応する。

+0

あなたは正しいです!私はちょうどtorch.cmax(a、b)を使用して "aまたはb"と等しくなり、torch.cmin(a、b)を "aとb"に変換すると考えました(aとbが論理テンソルであることを確認する必要があります。彼らは1と0だけを含む) – kerrigan