원소의 수를 유지하면서 배열의 모양을 바꾸는 방법
1.[numpy - reshape]
array.reshape(변환 shape), np.reshape(array, 변환 shape)
재배정이 불가능한 경우 ValueError
arr = np.arange(1, 10) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
reshaped_arr = np.reshape(arr, (3, 3))
print("Original array:")
print(arr)
print("\nReshaped array:")
print(reshaped_arr)
Original array:
[1 2 3 4 5 6 7 8 9]
Reshaped array:
[[1 2 3]
[4 5 6]
[7 8 9]]
2.[pytorch - view, reshape]
np.reshpae와 동일, pytorch의 view와 reshape은 동일한 결과값.
tensor = torch.arange(1, 10) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
tensor2 = tensor.view(3, 3)
print("Original tensor:")
print(tensor)
print("\nViewed tensor:")
print(tensor2)
print("\nReshaped tensor:")
print(tensor2)
Original tensor:
tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
Viewed tensor:
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Reshaped tensor:
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
3.pytorch view vs reshape 차이
동일한 변환 결과값을 내뱉는걸 위에서 확인했는데 무슨 차이가 있을까?
메모리 복사 (Memory Copy):
- view: view는 가능한 경우 메모리를 복사하지 않고 원래 텐서와 같은 데이터를 참조한다. 따라서 view로 만든 새로운 텐서와 원본 텐서는 동일한 메모리를 공유하게 된다.
- reshape: reshape는 가능한 경우 메모리를 복사하지 않는다. 그러나 reshape의 경우, 일부 경우에는 메모리 복사가 발생할 수 있습니다.
메모리 연속성 (Memory Contiguity):
- view: view는 C-contiguous 배열에만 적용할 수 있다. 즉, 메모리에 연속적으로 저장되어 있는 경우에만 view를 사용할 수 있다.
- reshape: reshape는 메모리 연속성에 크게 신경쓰지 않는다.
호환성:
- view: view는 뷰의 크기가 원본과 호환
- reshape: reshape도 마찬가지로 요소 수가 동일
300x250
반응형
'프로그래밍 > Python' 카테고리의 다른 글
텐서 타입 변경하기(numpy - astype(float), pytorch - float()) (1) | 2023.12.04 |
---|---|
텐서 차원 변경하기(pytorch - squeeze, unsqueeze/ numpy - squeeze, expand_dims) (0) | 2023.12.04 |
텐서, 행렬의 곱셈 - numpy(*, dot, @), pytorch(mul, matmul, @) 비교 (0) | 2023.12.01 |
tensor(텐서) 개념 및 numpy, pytorch 비교하기 (0) | 2023.12.01 |
[python] 문자열에서 특정 문자열 찾기(find, index, rfind, rindex) (1) | 2023.11.17 |