시험공부빅데이터분석
← 보드Tensor · 10/11

NumPy와 Tensor — 메모리를 같이 쓸 때와 아닐 때

NumPy 배열과 Tensor는 서로 바꿀 수 있어요. 그런데 바꾸는 방법에 따라 같은 데이터를 공유할 수도, 복사본일 수도 있어요. 공유하면 한쪽을 고칠 때 다른 쪽도 바뀌어요.

변환 방법메모리원본을 바꾸면
torch.from_numpy(arr)공유같이 바뀜
torch.from_numpy(arr).clone()복사 (독립)안 바뀜
torch.tensor(arr)복사 (독립)안 바뀜
t.numpy()공유같이 바뀜
t.numpy().copy()복사 (독립)안 바뀜
import numpy as np np_array = np.array([1, 2, 3], dtype=np.float32) t1 = torch.from_numpy(np_array) t2 = torch.tensor(np_array) t3 = torch.from_numpy(np_array).clone() np_array[2] = 100 print(np_array) print(t1) print(t2) print(t3)
[ 1. 2. 100.] tensor([ 1., 2., 100.]) tensor([1., 2., 3.]) tensor([1., 2., 3.])
코드 줄무슨 뜻
t1 = torch.from_numpy(np_array)NumPy 배열과 같은 메모리를 쓰는 Tensor
t2 = torch.tensor(np_array)값을 복사해서 새로 만든 Tensor
t3 = ....clone()공유 Tensor를 복제해서 독립시킨 것
np_array[2] = 100원본 NumPy의 2번 칸을 100으로 바꿔요
출력공유한 t1만 100으로 따라 바뀌고, 복사본 t2, t3는 그대로 [1, 2, 3]
Tensor와 NumPy 변환과 메모리 공유
교수님 슬라이드 — from_numpy는 메모리 공유(함께 변경), 독립 복사본이 필요하면 tensor() 또는 clone() 사용

반대 방향도 같아요. t.numpy()는 Tensor와 NumPy가 메모리를 같이 써서, Tensor를 고치면 NumPy도 바뀌어요. .numpy().copy()를 쓰면 독립이에요.

시험엔 이렇게 써요 — 이렇게 고르세요

torch.from_numpy()와 tensor.numpy()는 메모리를 공유하므로 한쪽을 바꾸면 다른 쪽도 바뀐다. 독립적인 복사본이 필요하면 torch.tensor(arr), clone(), .numpy().copy()를 쓴다. 결과 예측 문제는 "공유 = 같이 바뀜, 복사 = 안 바뀜"만 구분하면 돼요.

잠깐 확인 — a = np.array([1., 2.]); t = torch.from_numpy(a); t[0] = 9 를 실행하면 a는?

[9., 2.]예요. from_numpy는 메모리를 공유해서 Tensor를 바꾸면 a도 바뀌어요.

다음 카드 → 이 장 3줄 요약

자료: 2주차 · Week02_Tensor_and_GPU(pdf, 풀이포함 ipynb) · 빅분02(2주차) 녹취