文章目录
tensor与numpy格式相互转换
-
将一个Torch Tensor 转换为numpy数组是一件轻松的事,反之亦然
-
Torch Tensor与numpy数组共享底层内存地址,修改一个会导致另外一个的变化
tensor转numpy
将一个Torch Tensor转换为NumPy数组
In:
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
Out:
tensor([1., 1., 1., 1., 1.])
[1. 1. 1. 1. 1.]
注意观察numpy数组的值是如何改变
a.add_(1) # 相当于a+=1
print(a)
print(b)
tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]
NumPy Array 转化成 Torch Tensor
使用from_numpy自动转化
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)#转换成tensor 的类型
np.add(a,1,out=a)#a的值改变了
print(a)
print(b)#b的值也发生了变化
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
所有的Tensor类型默认都是基于CPU,CharTensor类型不支持到NumPy的转换
tensor与PIL格式相互转换
PIL格式的图片转tensor
PyTorch 中的张量默认采用 N×D×H×W 的顺序,并且数据范围在 [0, 1],需要进行转置和规范化。
# PIL.Image -> torch.Tensor.
tensor = torch.from_numpy(np.asarray(PIL.Image.open(path))
).permute(2, 0, 1).float() / 255
tensor = torchvision.transforms.functional.to_tensor(PIL.Image.open(path)) # Equivalently way
tensor转PIL格式
image = PIL.Image.fromarray(torch.clamp(tensor * 255, min=0, max=255
).byte().permute(1, 2, 0).cpu().numpy())
image = torchvision.transforms.functional.to_pil_image(tensor) # Equivalently way