2017-11-19 3 views
1

a[2, :, 0, :] 그러나PyTorch에서 2 차원 이상의 인덱스를 선택하는 방법은 무엇입니까?

0.5580 -0.0337 1.0048 -0.5044 0.6784 -1.6117 1.0084 1.1886 0.1278 0.3739 [torch.FloatTensor of size 2x5]

제공하는 동안 내가 ((2, :, 0, :), (1, :, 1, :), (2, :, 2, :), (0, :, 3, :) 같은 크기 (2, 4, 5) 또는 (4, 2, 5)?

의 결과 텐서를 하위 텐서를 선택하는 방법, a = torch.randn(3, 2, 4, 5)을 감안할 때, a[[2, 1, 2, 0], :, [0, 1, 2, 3], :]

TypeError: Performing basic indexing on a tensor and encountered an error indexing dim 0 with an object of type list. The only supported types are integers, slices, numpy scalars, or if indexing with a torch.LongTensor or torch.ByteTensor only a single Tensor may be passed.

제공 numpy(4, 2, 5)을 반환하지만 성공적으로 ensor.

답변

0

효과가 있습니까?

import torch 

a = torch.randn(3, 2, 4, 5) 
print(a.size()) 

b = [a[2, :, 0, :], a[1, :, 1, :], a[2, :, 2, :], a[0, :, 3, :]] 
b = torch.stack(b, 0) 

print(b.size()) # torch.Size([4, 2, 5]) 
+0

나는 이것에 대해 너무 많이 생각하고있었습니다.이 접근 방식은 깔끔합니다. 4D 배열의 토치 표기법은 numpy와 다릅니다. +1. https://github.com/pytorch/pytorch/issues/2412에는 많은 문제가 있습니다. – Dark

+0

일반적으로 'b'를 빌드하기 위해 'for'리스트 이해력을 사용해야한다는 의미입니까? – Edityouprofile

+0

@ 표시 이름은 아닙니다. 당신은 당신의 모든 문제를 언급하지 않았고, 당신은 방금 특정한 문제를 언급했고, 목록을 고려하는 것이 문제를 해결하는 한 가지 방법입니다. –