tensor与numpy的相互转换

这篇具有很好参考价值的文章主要介绍了tensor与numpy的相互转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. numpy转tensor

命令1:torch.tensor()

tensor与numpy的相互转换

 a = np.random.random(size=(4,5))
 b = torch.tensor(a,dtype=torch.float)
====输出========
>> a
array([[0.93866392, 0.5665604 , 0.32893379, 0.77752777, 0.59380636],
       [0.09680724, 0.09611474, 0.69760508, 0.9120742 , 0.07956756],
       [0.46761691, 0.7771953 , 0.23979901, 0.52539619, 0.99063046],
       [0.05881101, 0.77289148, 0.22587614, 0.6438252 , 0.82986165]])

>>b
tensor([[0.9387, 0.5666, 0.3289, 0.7775, 0.5938],
        [0.0968, 0.0961, 0.6976, 0.9121, 0.0796],
        [0.4676, 0.7772, 0.2398, 0.5254, 0.9906],
        [0.0588, 0.7729, 0.2259, 0.6438, 0.8299]])

注意
tensor与numpy的相互转换

命令2:torch.as_tensor()

tensor与numpy的相互转换

>>> c =torch.as_tensor(a)
>>> c
tensor([[0.9387, 0.5666, 0.3289, 0.7775, 0.5938],
        [0.0968, 0.0961, 0.6976, 0.9121, 0.0796],
        [0.4676, 0.7772, 0.2398, 0.5254, 0.9906],
        [0.0588, 0.7729, 0.2259, 0.6438, 0.8299]], dtype=torch.float64)
命令3:torch.from_numpy()

tensor与numpy的相互转换

>>> d = torch.from_numpy(a)
>>> d
tensor([[0.9387, 0.5666, 0.3289, 0.7775, 0.5938],
        [0.0968, 0.0961, 0.6976, 0.9121, 0.0796],
        [0.4676, 0.7772, 0.2398, 0.5254, 0.9906],
        [0.0588, 0.7729, 0.2259, 0.6438, 0.8299]], dtype=torch.float64)
区别:转换之后,numpy.array和tensor中的数据是否仍指向相同的内存地址
  • torch.from_numpy(np.array)torch.as_tensor(),均会指向相同的内存地址。
  • torch.tensor()不会指向相同的内存地址,是深度copy。从下面的实例可以看到,修改numpy的值,tensor的值不会改变
n = np.ones(5)
t = torch.as_tensor(n)
t1 = torch.from_numpy(n)
t2 = torch.tensor(n)
print('numpy n = ', n)
print('torch t =', t)
print('torch t1 =', t1)
print('torch t2 =', t2)

n += 1
print("\nafter add 1, numpy = ", n)
print('torch t = ', t)
print('torch t1 = ', t1)
print('torch t2 = ', t2)

# 输出。
numpy n =  [1. 1. 1. 1. 1.]
torch t = tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
torch t1 = tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
# numpy +1之后,三种方式转换出来的tensor的变化
after add 1, numpy =  [2. 2. 2. 2. 2.]
torch t =  tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
torch t1 =  tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
torch t2 =  tensor([1., 1., 1., 1., 1.], dtype=torch.float64)

2. tensor转numpy

命令1:tensor.numpy()
命令2:np.array(tensor)
对比
  • tensor.numpy()之后,仍会指向相同的内存地址
  • np.array(tensor)之后,不会指向相同的内存地址
t = torch.ones(5)
n1 = t.numpy()
n2 = np.array(t)
print('numpy n1 = ', n1)
print('numpy n2 = ', n2)
print('torch t =', t)

t += 1

print("\nafter +1 ")
print("numpy n1= ", n1)
print("numpy n2 = ", n2)
print('torch = ', t)

# 输出结果
numpy n1 =  [1. 1. 1. 1. 1.]
numpy n2 =  [1. 1. 1. 1. 1.]
torch t = tensor([1., 1., 1., 1., 1.])

after +1 
numpy n1=  [2. 2. 2. 2. 2.]
numpy n2 =  [1. 1. 1. 1. 1.]  # 没有改变
torch =  tensor([2., 2., 2., 2., 2.])
注意:

GPU上的tensor不能和numpy直接转换。必须先转换为CPU上的tensor。文章来源地址https://www.toymoban.com/news/detail-400511.html

# 如果一个tensor的device是GPU,先使用如下命令转为CPU
tensor.cpu()  
# 再使用tensor.numpy()进行转化
tensor.data.numpy()
# tensor到GPU
tensor.GPU()

参考

  1. https://pytorch.org/docs/1.2.0/torch.html#torch.as_tensor

到了这里,关于tensor与numpy的相互转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PIL,cv2读取类型及转换,以及PIL,numpy,tensor格式以及cuda,cpu的格式转换

    这里先列个表格方便理解清楚: cv2 PIL 读取 a=cv2.imread() a=Image.open() 读取类型 数组类型 PIL类型 读取颜色通道 BGR RGB(这里需要注意的是当图像格式为RGBA时,PIL读取的是RGBA) 读取尺寸排列 (H,W,C) (W,H,C) 显示图片 cv2.imshow(“a”, a) cv2.waitKey (0) a.show() 相互之间转换显示 Ima

    2024年02月03日
    浏览(37)
  • PIL、cv2、numpy,和pytorch(torch)之间的转换

    在图像处理和深度学习中,经常需要在PIL(Python Imaging Library)、OpenCV(cv2)、NumPy和PyTorch之间进行图像数据的转换。下面是这些库之间常见的转换方法。 1. PIL和numpy之间的转换 2. cv2和numpy之间的转换 3.numpy和pytorch之间的转换 4.PIL和torch之间的转换 5.cv2和pytorch之间的转换 6.PI

    2024年01月25日
    浏览(38)
  • ROS系列——使用python的transforms3d、numpy库实现四元数、旋转矩阵、欧拉角、轴角等的相互转换

    pip3 install transforms3d 四元数模块在transforms3d.quaternions里,直接导入即可使用 2.1.1四元数转旋转矩阵 2.1.2 旋转矩阵转四元数 2.2.1 四元数转轴角 2.2.2 轴角转四元数 四元数模块在transforms3d.euler里,直接导入即可使用 3.1.1 固定轴欧拉角转四元数 3.1.2 四元数转固定轴欧拉角 3.2.1 固定

    2024年02月07日
    浏览(90)
  • tensor是pytorch的核心,那torch.tensor和torch.Tensor区别是?

    从本节课程开始我们将正式开启pytorch的学习了,在深度学习框架中有一个重要的概念叫做张量,它是pytorch的基本操作单位,要想创建tensor有很多的方式,但是有两个torch.tensor和torch.Tensor容易混淆,本节课程对二者进行总结。 torch.Tensor是默认的tensor类型(torch.FloatTensor)的简

    2024年04月24日
    浏览(36)
  • pytorch里torch.gather()和torch.Tensor.scatter()解析

    torch.Tensor.scatter() 类似 gather 的反向操作(gather是读出数据,scatter是写入数据),所以这里只解析torch.gather()。 gather()这个操作在功能上较为反人类,即使某段时间理解透彻了,过了几个月不碰可能又会变得生疏。官方文档对其描述也是较为简单,有些小伙伴看完可能还是不完

    2024年02月16日
    浏览(40)
  • 深度学习:探究Tensor和Numpy

    目录 引言 1 pytorch中Tensor 1.1 什么是Tensor 1.2 为什么需要Tensor 1.3 如何创建Tensor 1.3.1 从已有其他数据结构转化创建为Tensor 1.3.2 随机初始化一个Tensor 1.3.3 从已保存文件加载一个Tensor 1.4 Tensor的特性 1.4.1 丰富的常用函数操作 1.4.2 灵活的dtype和CPU/GPU自由切换 1.4.3 自动梯度求解 2 Nu

    2024年02月14日
    浏览(37)
  • 深入浅出Pytorch函数——torch.tensor

    分类目录:《深入浅出Pytorch函数》总目录 相关文章: · 深入浅出TensorFlow2函数——tf.constant · 深入浅出Pytorch函数——torch.tensor · 深入浅出Pytorch函数——torch.as_tensor · 深入浅出Pytorch函数——torch.Tensor · 深入浅出PaddlePaddle函数——paddle.to_tensor 基于 data 构建一个没有梯度历史

    2024年02月04日
    浏览(105)
  • numpy & pytotch tensor 常用操作对比

    操作 Tensor Numpy 示例 增加维度 torch.unsqueezeinput, dim, out=None) np.expand_dims(input, axis) 改变数据类型 input.type(torch.FloatTensor / torch.LongTensor) input.astype(np.int64 / np.float64) 全1tensor torch.ones(5,3,dtype= torch.float64) 全0tensor torch.zeros(5,3,dtype= torch.float64) 对角线为1,其他为0 torch.eye(5,3,dtype= torch.

    2024年02月13日
    浏览(36)
  • 【Pytorch基础教程39】torch常用tensor处理函数

    torch.tensor 会复制data,不想复制可以使用 torch.Tensor.detach() 。 如果是获得numpy数组数据,可以使用 torch.from_numpy() ,共享内存 torch.mm : 用于两个矩阵(不包括向量)的乘法。如维度为(l,m)和(m,n)相乘 torch.bmm : 用于带batch的三维向量的乘法。如维度为(b,l,m)和(b,m,n)相乘 torch.mul : 用于

    2024年02月13日
    浏览(75)
  • 深入浅出Pytorch函数——torch.Tensor.backward

    分类目录:《深入浅出Pytorch函数》总目录 相关文章: · 深入浅出Pytorch函数——torch.Tensor 计算当前张量相对于图的梯度,该函数使用链式法则对图进行微分。如果张量不是一个标量(即其数据具有多个元素)并且需要梯度,则函数还需要指定梯度,指定的梯度应该是一个与

    2024年02月15日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包