Tensor 和 Numpy 的数组可以相互转换,并且两者转换后共享在 CPU 下的内存空间,即改变其中一个的数值,另一个变量也会随之改变。
Tensor 转换为 Numpy 数组
实现 Tensor 转换为 Numpy 数组的例子如下所示,调用 tensor.numpy() 可以实现这个转换操作。
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
输出结果:
tensor([1., 1., 1., 1., 1.])
[1. 1. 1. 1. 1.]
两者是共享同个内存空间的,修改 tensor 变量 a,看看从 a 转换得到的 Numpy 数组变量 b 是否发生变化,如下所示:
a.add_(1)
print(a)
print(b)
输出结果如下,很明显,b 也随着 a 的改变而改变。
tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]
Numpy 数组转换为 Tensor
转换的操作是调用 torch.from_numpy(numpy_array) 方法,如下所示:
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
输出结果:
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
备注:在 CPU 上,除了 CharTensor 外的所有 Tensor 类型变量,都支持和 Numpy数组的相互转换操作。