Tensor, Numpy(array), list相互转换,及在gpu中的使用

一、Tensor和Numpy(array)相互转换

  1. 我们很容易用 numpy()from_numpy() 将 Tensor 和NumPy中的数组相互转换。
    但是需要注意的点是: 这两个函数所产⽣生的的 Tensor 和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中⼀个时另⼀个也会改变!!!
  2. 还有一个常用的将NumPy中的array转换成 Tensor 的方法就是 torch.tensor() , 需要注意的
    是,此方法总是会进行数据拷贝(就会消耗更多的时间和空间),所以返回的 Tensor 和原来的数据不再共享内存。

(一) Tensor转Numpy

使用numpy()将 Tensor 转换成NumPy数组。

a = torch.ones(5)
b = a.numpy()
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)

#输出:
#tensor([1., 1., 1., 1., 1.]) [1. 1. 1. 1. 1.]
#tensor([2., 2., 2., 2., 2.]) [2. 2. 2. 2. 2.]
#tensor([3., 3., 3., 3., 3.]) [3. 3. 3. 3. 3.]

注:gpu中的Tensor转Numpy

b = a.cpu().detach().numpy()

(二) Numpy转Tensor

  1. 通过使用 from_numpy() 将NumPy数组转换成 Tensor。
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)

#输出
#[1. 1. 1. 1. 1.] tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
#[2. 2. 2. 2. 2.] tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
#[3. 3. 3. 3. 3.] tensor([3., 3., 3., 3., 3.], dtype=torch.float64)
  1. 此外上面我们提到还有一个常用的方法就是直接用 torch.tensor() 将NumPy数组转换成 Tensor ,需要注意的是该方法总是会进行数据拷贝,返回的 Tensor 和原来的数据不再共享内存。
c = torch.tensor(a)
a += 1
print(a, c)

#输出
#[4. 4. 4. 4. 4.] tensor([3., 3., 3., 3., 3.], dtype=torch.float64)

注:Numpy转Tensor后放入gpu中

b = torch.from_numpy(a).cuda()

二、Array和List相互转换

  1. array转list
import numpy as np
a = np.array(12, np.float32)
list = a.tolist()
  1. list转array
import numpy as np
a = list()
array = np.array(a)

三、List和Tensor相互转换

  1. Tensor转list
    该转换不能一部完成,通常需要先把tensor转array,再把array转list
list = tensor.numpy().tolist()
  1. list转Tensor
tensor=torch.Tensor(list)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NumPy array和Python List是两种常见的数据类型,它们都具有存储和操作数据的功能,但是这两种数据类型的使用方式和功能特性有很大的差异。 首先,NumPy arrayNumPy库的一个核心数据类型,它是一个固定大小且与元素类型相同的数组,而Python List是一个可变大小的列表,可以包含不同类型的数据。由于NumPy array是固定大小的,相较于Python List,在存储和访问大规模数据时更为高效。 其次,NumPy array支持广播和向量化操作,可以进行逐元素的运算,使得数据运算更加快速和高效,而Python List则需要一个for循环来完成逐个运算。 此外,NumPy库还可以进行线性代数、统计计算等高级运算。对于处理一些科学计算和数据分析任务,NumPy array可以更好地满足需求。 相比之下,PyTorch是一个基于Torch的Python深度学习框架,它的主要数据类型是Tensors。Tensors也类似于NumPyarray,可以存储和操作数据,但它同时支持GPU计算,可以快速计算神经网络的大量计算。 此外,PyTorch框架还提供了自动微分、模型构建和优化等功能,对于进行深度学习任务的开发人员来说是非常便利的。而NumPy库则更适用于进行一些基础的数值计算和科学计算任务。 总之,NumPy array和Python List是两种不同的数据类型,适用于不同的数据处理场景,而PyTorchTensor则是一种更专门用于深度学习的数据类型。选择合适的数据类型,可以在数据处理和深度学习任务提高效率和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值