반응형
Numpy array나 Tensor 형태의 배열이 list로 감싸져 있을 때 벗겨내는 방법
Unsupervised/Semi-Supervised Learning을 하기 위해 Training set을 재정의 한다던가, Custom Dataset을 만들었을 때 Training sample을 만들기 위해, 등등 여러가지 경우로 아래의 코드와 같이 리스트 안에 또 다른 배열, numpy array, tensor 등을 정의할 때가 생긴다. 이 때 이 배열에서 빼내는 방법에 대해서 알아보자.
MNIST 데이터 셋을 예시로 들었을 때 이미지의 크기는 (1, 28, 28) 정도가 된다. 하지만 시각화 하기 어렵기에, 임의로 정의한 np.ones((1, 4, 4)) 크기의 numpy array를 예시로 들어보자.
tensor_list = torch.Tensor(np.ones((100, 1, 4, 4)))
tensor_array_with_list = [tensor for tensor in tensor_list]
print(tensor_array_with_list)
위와 같은 크기의 numpy array를 tensor로 생성 후, 리스트에 집어 넣을 경우 다음과 같은 형태가 나오게 되며, 이 tensor를 빼내기 위해선 아래와 같은 작업을 하면 된다.
[tensor([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]]), tensor([[[1., 1., 1., 1.],
...
[1., 1., 1., 1.]]]), tensor([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]])]
numpy나 tensor 형태로 변환하는데 어려움을 겪을 경우 아래와 같이 List compreshention에 출력 값에다가 .numpy() 혹은 np.array()를 덮어 씌워준 후 겉에도 np.array() 혹은 torch.Tensor()로 감싸주시면 된다.
np_array = np.array([tensor.numpy() for tensor in tensor_array_with_list])
np_array.shape, np_array # (100, 1, 4, 4)
출력 결과
((100, 1, 4, 4),
array([[[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]],
...,
[[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
...
[[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]]], dtype=float32))
반응형
'Python' 카테고리의 다른 글
timm 모델 리스트 + 옵티마이저까지 (timm model list / 2024.04.19) (2) | 2024.04.19 |
---|---|
Pytorch 설치 (0) | 2024.04.12 |
Docker container에서 아나콘다 실행 및 기본 설정 (0) | 2024.02.27 |
Python numpy 지수표기, e+ 표기 없이 출력하기 (0) | 2022.09.05 |