2017-11-19 3 views
0

私は2D Tensor、index_in_batch * diag_eleを持っていると考えてください。 3Dテンソルindex_in_batch * Matrixを入手するにはどうしたらいいですか?(対角行列は誰ですか?drag_eleで構成しますか?PyTorchですべての2Dサブテンソルが対角行列である3Dテンソルを構築する方法は?

torch.diag()は、入力が1Dの場合のみ対角行列を構成し、入力が2Dの場合は対角要素を返します。

答えて

2
import torch 

a = torch.rand(2, 3) 
print(a) 
b = torch.eye(a.size(1)) 
c = a.unsqueeze(2).expand(*a.size(), a.size(1)) 
d = c * b 
print(d) 

出力

0.5938 0.5769 0.0555 
0.9629 0.5343 0.2576 
[torch.FloatTensor of size 2x3] 


(0 ,.,.) = 
    0.5938 0.0000 0.0000 
    0.0000 0.5769 0.0000 
    0.0000 0.0000 0.0555 

(1 ,.,.) = 
    0.9629 0.0000 0.0000 
    0.0000 0.5343 0.0000 
    0.0000 0.0000 0.2576 
[torch.FloatTensor of size 2x3x3] 
+0

ありがとう、これは私が欲しいものです。 –

+0

ちなみに、変数に適用すると自動的に後方に計算できる*手順の別の解決策がありますか? –

+0

@刘钦卿私はあなたの質問をよく理解していません。新しい質問がある場合は、別の質問(詳細を含む)としてSOに投稿してください。また、私の答えがあなたを助けたら、あなたは緑の印に感謝することでそれを受け入れることができます、ありがとう。 –

0

変数で包むことにより、後方の自動車のためのソリューション。

import torch 

a = torch.rand(2, 3) 
print(a) 

b = Variable(torch.eye(a.size(1))) 
c = a.unsqueeze(2).expand(*a.size(), degree_inv.size(1)) 
b_expand = b.unsqueeze(0).expand(c.size(0), *b.size()) 
d = torch.mul(c.double(), b_expand.double()) 

print(d) 
関連する問題