텐서값이 메모리 상에서 순서대로 존재하느냐를 의미한다.
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타입같은 경우 독립적인 메모리에 저장돼 접근 속도가 느리다.