将PyTorch Tensor转换为Python列表的三种方法

 更新时间:2026年04月17日 08:26:02   作者:detayun  
本文介绍了三种将PyTorch Tensor转换为Python列表的方法,推荐使用.tolist()方法,适用于任何维度的Tensor,自动处理CPU/GPU转换且性能更优,同时提到了注意事项,.list()仅适用于一维Tensor,转换后的列表元素保持原有的数据类型

方法一:使用.tolist()方法(推荐)

import torch

# 创建一个 tensor
tensor = torch.tensor([9.6919, -0.6950, 11.8760, 1.6362, 8.3674, 9.2179])

# 转换为列表
list_result = tensor.tolist()

print(list_result)
print(type(list_result))
# 输出: [9.6919, -0.695, 11.876, 1.6362, 8.3674, 9.2179]
# 输出: <class 'list'>

方法二:使用list()函数

import torch

tensor = torch.tensor([9.6919, -0.6950, 11.8760, 1.6362, 8.3674, 9.2179])

# 转换为列表
list_result = list(tensor)

print(list_result)
print(type(list_result))
# 输出: [9.6919, -0.695, 11.876, 1.6362, 8.3674, 9.2179]
# 输出: <class 'list'>

方法三:使用.numpy()方法(适用于 CPU tensor)

import torch

tensor = torch.tensor([9.6919, -0.6950, 11.8760, 1.6362, 8.3674, 9.2179])

# 先转换为 numpy 数组,再转换为列表
list_result = tensor.numpy().tolist()

print(list_result)
print(type(list_result))

处理 GPU Tensor

如果 tensor 在 GPU 上,需要先移动到 CPU:

import torch

# 假设 tensor 在 GPU 上
tensor_gpu = torch.tensor([9.6919, -0.6950, 11.8760, 1.6362, 8.3674, 9.2179]).cuda()

# 先移动到 CPU,再转换为列表
list_result = tensor_gpu.cpu().tolist()

print(list_result)

处理多维 Tensor

import torch

# 二维 tensor
tensor_2d = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])

# 转换为嵌套列表
list_2d = tensor_2d.tolist()
print(list_2d)
# 输出: [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]

# 三维 tensor
tensor_3d = torch.tensor([[[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0], [7.0, 8.0]]])
list_3d = tensor_3d.tolist()
print(list_3d)
# 输出: [[[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0], [7.0, 8.0]]]

完整示例

import torch

def tensor_to_list(tensor):
    """
    将 PyTorch tensor 转换为 Python 列表
    """
    if tensor.is_cuda:
        # 如果在 GPU 上,先移动到 CPU
        tensor = tensor.cpu()
    
    return tensor.tolist()

# 测试
tensor = torch.tensor([9.6919, -0.6950, 11.8760, 1.6362, 8.3674, 9.2179])
result = tensor_to_list(tensor)

print("原始 tensor:", tensor)
print("转换后的列表:", result)
print("列表类型:", type(result))
print("列表元素类型:", type(result[0]))

注意事项

.tolist() vs list():

  • .tolist(): 推荐使用,适用于任何维度的 tensor,返回嵌套列表
  • list(): 只适用于一维 tensor,对于多维 tensor 会返回 tensor 列表而不是数值列表

数据类型: 转换后的列表元素会保持 tensor 的数据类型(如 float32、float64 等)

性能: 对于大型 tensor,.tolist() 可能比 list() 稍快

梯度: 如果 tensor 有梯度,.tolist() 会自动处理,只返回数值

推荐做法

始终使用 .tolist() 方法,因为它:

  • 适用于任何维度的 tensor
  • 自动处理 CPU/GPU 转换(需要先调用 .cpu()
  • 代码更清晰易读
  • 性能更好
# 最佳实践
list_result = tensor.tolist()  # 对于 CPU tensor
# 或
list_result = tensor.cpu().tolist()  # 对于可能在 GPU 上的 tensor

到此这篇关于将PyTorch Tensor转换为Python列表的三种方法的文章就介绍到这了,更多相关PyTorch Tensor转为Python列表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pyhton多线程采集图片方式

    Pyhton多线程采集图片方式

    这篇文章主要介绍了Pyhton多线程采集图片方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • windowns使用PySpark环境配置和基本操作

    windowns使用PySpark环境配置和基本操作

    pyspark是Spark对Python的api接口,可以在Python环境中通过调用pyspark模块来操作spark,这篇文章主要介绍了windowns使用PySpark环境配置和基本操作,感兴趣的可以了解一下
    2021-05-05
  • 使用Python实现轻松调整视频的播放速度

    使用Python实现轻松调整视频的播放速度

    这篇文章主要介绍了如何通过 moviepy.editor 中的 VideoFileClip 类和 fx.speedx 函数实现轻松地调整视频的播放速度,感兴趣的可以了解下
    2024-11-11
  • python使用Pandas导出数据并保存为CSV文件

    python使用Pandas导出数据并保存为CSV文件

    Pandas是Python中用于数据分析和处理的强大库,它提供了灵活高效的数据结构,如DataFrame和Series,使得对数据的处理变得简单易行,在实际应用中,我们经常需要将处理后的数据保存为CSV,所以本文给大家介绍了python使用Pandas导出数据并保存为CSV文件
    2024-12-12
  • Pandas中根据条件替换列中的值的四种方式

    Pandas中根据条件替换列中的值的四种方式

    本文主要介绍了Pandas中根据条件替换列中的值的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 全面解析python当前路径和导包路径问题

    全面解析python当前路径和导包路径问题

    这篇文章主要为大家介绍了python当前路径和导包路径问题的全面解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 教你用 Python 实现微信跳一跳(Mac+iOS版)

    教你用 Python 实现微信跳一跳(Mac+iOS版)

    这几天看网上好多微信跳一跳破解了,不过都是安卓的,无奈苹果不是开源也没办法。本文给大家分享用 Python 来玩微信跳一跳(Mac+iOS版),具体实现代码大家参考下本文
    2018-01-01
  • python中小数点后取2位(四舍五入)及取2位(四舍五不入)的方法

    python中小数点后取2位(四舍五入)及取2位(四舍五不入)的方法

    这篇文章主要给大家介绍了python中小数点后取2位(四舍五入)及取2位(四舍五不入)的方法,在Python中取两位小数的方法其实非常简单,需要的朋友可以参考下
    2023-08-08
  • Python 对象拷贝及深浅拷贝区别的详细教程示例

    Python 对象拷贝及深浅拷贝区别的详细教程示例

    这篇文章主要介绍了Python 对象拷贝及深浅拷贝区别的详细教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Python Pyqt5多线程更新UI代码实例(防止界面卡死)

    Python Pyqt5多线程更新UI代码实例(防止界面卡死)

    这篇文章通过代码实例给大家介绍了Python Pyqt5多线程更新UI防止界面卡死的问题,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-12-12

最新评论