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

1.1 list 转 numpy
1.2 numpy 转 list
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) |
| |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2022-07-04 计算机网络