Search

Tensor의 contiguous함

텐서값이 메모리 상에서 순서대로 존재하느냐를 의미한다.
import torch a = torch.randn(2, 3) # torch.FloatTensor -> float32 -> 4byte for i in range(2): for j in range(3): print(a[i][j].data_ptr()) ''' 89404096 89404100 89404104 89404108 89404112 89404116 -> 주소가 4씩 차이남 ''' b = a.transpose(0, 1) # transpose의 반환 텐서는 contiguous하지 않다. print(b.is_contiguous()) # False for i in range(3): for j in range(2): print(b[i][j].data_ptr()) ''' 89404096 89404108 89404100 89404112 89404104 89404116 '''
Python
복사
위 그림과 같은 변화가 일어난다.
.contiguous() 를 통해서 메모리상의 저장 구조를 바꿔줄 수 있다.
numpy가 이러한 형태로 contiguous하게 저장을 하는데, 이로 인해 접근이나 transpose를 빠르게 할 수 있다.
참고로 파이썬 list타입같은 경우 독립적인 메모리에 저장돼 접근 속도가 느리다.