← 보드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] |

반대 방향도 같아요. 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주차) 녹취