当前位置: 首页 > news >正文

【学习笔记】Numpy和Tensor的区别

1. NumPy 和 PyTorch Tensor 的格式对比

NumPy 使用的是 numpy.ndarray,而 PyTorch 使用的是 torch.Tensor,两者的格式在数据存储和计算方式上有所不同。

NumPy (numpy.ndarray)
import numpy as np
array = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(array.shape)  # 输出: (2, 3)
print(type(array))  # <class 'numpy.ndarray'>
  • 存储格式:数据存储在 CPU 内存中,默认是 float64
  • 索引方式:与 Python list 类似,可以用 array[i, j] 访问元素。
  • 操作方式:可以用 np.min(array, axis=0) 计算最小值,支持广播计算。
PyTorch (torch.Tensor)
import torch
tensor = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(tensor.shape)  # 输出: torch.Size([2, 3])
print(type(tensor))  # <class 'torch.Tensor'>
  • 存储格式:可以在 CPU 或 GPU(通过 .cuda())上存储,默认是 float32
  • 索引方式:与 NumPy 相同,例如 tensor[i, j] 访问元素。
  • 操作方式:支持 torch.min(tensor, dim=0),但也支持梯度计算。

2. NumPy 和 Tensor 主要区别

特性NumPy (numpy.ndarray)PyTorch (torch.Tensor)
存储位置仅支持 CPU支持 CPU 和 GPU(tensor.cuda()
数据类型默认 float64默认 float32(更快)
自动求导不支持支持(requires_grad=True
计算库只依赖 NumPy可用 GPU 加速(CUDA)
转换方式.astype(np.float32).to(torch.float32)

3. NumPy 和 Tensor 互相转换

Tensor 转 NumPy
tensor = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
array = tensor.numpy()  # 转换为 NumPy
print(type(array))  # <class 'numpy.ndarray'>

注意:转换后的 NumPy 数组和原始 Tensor 共享内存,修改其中一个会影响另一个。

NumPy 转 Tensor
array = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
tensor = torch.from_numpy(array)  # 转换为 Tensor
print(type(tensor))  # <class 'torch.Tensor'>

注意:转换后的 Tensor 仍然在 CPU,如果要在 GPU 计算,需要 .to(device)

如果 NumPy 数组在 GPU 上使用:

tensor = torch.from_numpy(array).to('cuda')

总结

  1. NumPy (numpy.ndarray) 只在 CPU 上计算,数据格式是 float64,不支持自动求导。
  2. PyTorch Tensor (torch.Tensor) 支持 GPU 加速,默认 float32,可以自动求导。
  3. 互相转换
    • tensor.numpy() 转 NumPy(共享内存)。
    • torch.from_numpy(array) 转 Tensor(仍然在 CPU)。
    • tensor.to('cuda') 让 Tensor 运行在 GPU 上。

相关文章:

  • 如何选取合适的 NewRatio 值来优化 JVM 的垃圾回收策略
  • 数据挖掘导论——第二章:数据
  • Python入门宝典:函数、列表元组与字典详解
  • Linux:多线程(三.POSIX信号量、生产消费模型、线程池)
  • 计算机网络——IP、MAC、ARP
  • 常见的交换机端口类型
  • golang从入门到做牛马:第十七篇-Go语言Map:键值对的“魔法袋”
  • 【前端】【组件】【vue2】封装一个vue2的ECharts组件,不用借助vue-echarts
  • ctf-web: php原生类利用 -- GHCTF Popppppp
  • 深度学习笔记——残差网络和模型选择
  • 【python-uiautomator2】手机上的ATX应用界面报错问题处理:无法提供服务,非am instrument启动
  • 图像处理篇---opencv中的图像特征
  • JavaScript基本知识
  • 【C++模板】:开启泛型编程之门(函数模版,类模板)
  • 大模型在甲状腺良性肿瘤诊疗全流程中的应用研究报告
  • 【Golang】第一弹-----初步认识GO语言
  • docker 小记
  • 使用 OpenSSL 和 Python 实现 AES-256-CBC 加密与解密(安全密钥管理)
  • Node 使用 SSE 结合redis 推送数据(echarts 图表实时更新)
  • Javascript基础语法详解
  • 个人网站建设的要点/怎样在平台上发布信息推广
  • 做网站小程序在哪点拉客户/平台连接
  • 做logo网站的公司/91手机用哪个浏览器
  • 视频网站做推广有没有效果/深圳市社会组织总会
  • 2017设计工作室做网站/湖南网站营销seo方案
  • nuxt做多页面网站/免费精准客源