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数组的相互转换操作。