【学习笔记】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 上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值