【发布时间】:2020-05-01 21:15:30
【问题描述】:
我正在尝试深入了解 torch.from_numpy() 的工作原理。
import numpy as np
import torch
arr = np.zeros((3, 3), dtype=np.float32)
t = torch.from_numpy(arr)
print("arr: {0}\nt: {1}\n".format(arr, t))
arr[0,0]=1
print("arr: {0}\nt: {1}\n".format(arr, t))
print("id(arr): {0}\nid(t): {1}".format(id(arr), id(t)))
输出如下:
arr: [[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
t: tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
arr: [[1. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
t: tensor([[1., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
id(arr): 2360964353040
id(t): 2360964352984
这是来自torch.from_numpy()的文档的一部分:
from_numpy(ndarray) -> 张量
从 :class:
numpy.ndarray创建一个 :class:Tensor。返回的张量和 :attr:
ndarray共享相同的内存。修改为 张量将反映在 :attr:ndarray中,反之亦然。返回的 张量不可调整大小。
这是来自id()的文档:
返回对象的标识。
这保证在同时存在的对象中是唯一的。 (CPython 使用对象的内存地址。)
那么问题来了:
既然ndarrayarr和张量t共享同一个内存,为什么它们的内存地址不同呢?
有什么想法/建议吗?
【问题讨论】:
标签: numpy pytorch shared-memory