torch.tensor、numpy.array、list三者之间互相转换

torch.tensor、numpy.array、list三者之间互相转换

image

1.1 list 转 numpy

ndarray = np.array(list)

1.2 numpy 转 list

list = ndarray.tolist()

2.1 list 转 torch.Tensor

tensor=torch.Tensor(list)

2.2 torch.Tensor 转 list

先转numpy,后转list

list = tensor.numpy().tolist()

3.1 torch.Tensor 转 numpy

转换后共享内存
注意,转换后的 pytorch tensor 与 numpy array 指向同一地址,所以,对一方的值改变另一方也随之改变

最完全最常用的将 Tensor 转成 numpy array 的方法如下:
x.detach().to('cpu').numpy()
在最简单的情况下,当你在 CPU 上有一个没有梯度的 PyTorch 张量时,你可以简单地调用 .numpy() 方法
ndarray = tensor.numpy()
*gpu上的tensor不能直接转为numpy
如果 Tensor 位于 “cpu” 以外的设备上,则需要先将其带回 CPU,然后才能调用 .numpy() 方法。
ndarray = tensor.cpu().numpy()
如果张量是需要梯度的计算图的一部分(也就是说,如果 x.requires_grad=True),则需要调用 .detach() 方法:
x = torch.eye(3, requires_grad=True)
x.detach().numpy()

3.2 numpy 转 torch.Tensor

tensor = torch.from_numpy(ndarray)
转换时改变数据类型
tensor = torch.from_numpy(x).type(torch.float32)
转换时发送到不同的设备上,如 GPU
if torch.cuda.is_available():
y = torch.from_numpy(x).to("cuda")
注意,当使用锁页内存(pytorch 中数据加载器的锁页内存 pinned memory)的方式加载数据时,数据放入 GPU 的时候,应该把 non_blocking=True,这样能够缩减访问时间,加快训练。
if torch.cuda.is_available():
y = torch.from_numpy(x).to("cuda", non_blocking=True)
posted @   michaelchengjl  阅读(537)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2022-07-04 计算机网络
点击右上角即可分享
微信分享提示