0402-Tensor和Numpy的区别

pytorch完整教程目录:https://www.cnblogs.com/nickchen121/p/14662511.html

由于tensor和ndarray具有很高的相似性,并且两者相互转化需要的开销很小。但是由于ndarray出现时间较早,相比较tensor有更多更简便的方法,因此在某些时候tensor无法实现某些功能,可以把tensor转换为ndarray格式进行处理后再转换为tensor格式。

一、tensor数据和ndarray数据相互转换

import numpy as np

a = np.ones([2, 3], dtype=np.float32)
a
array([[1., 1., 1.],
[1., 1., 1.]], dtype=float32)

b = t.from_numpy(a)  # 把ndarray数据转换为tensor数据
b
tensor([[1., 1., 1.],
[1., 1., 1.]])
b = t.Tensor(a)  # 把ndarray数据转换为tensor数据
b
tensor([[1., 1., 1.],
[1., 1., 1.]])
a[0, 1] = 100
b
tensor([[  1., 100.,   1.],
[ 1., 1., 1.]])
c = b.numpy()  # 把tensor数据转换为ndarray数据
c
array([[  1., 100.,   1.],
[ 1., 1., 1.]], dtype=float32)

二、广播法则

广播法则来源于numpy,它的定义如下:

  • 让所有输入数组都向其中shape最长的数组看齐,shape中不足部分通过在前面加1补齐
  • 两个数组要么在某一个维度的长度一致,要么其中一个为1,否则不能计算
  • 当输入数组的某个维度的长度为1时,计算时沿此维度复制扩充×一样的形状

torch当前支持自动广播法则,但更推荐使用以下两个方法进行手动广播,这样更直观,更不容出错:

  1. unsqueeze或view:为数据某一维的形状补1
  2. expand或expand_as:重复数组,实现当输入的数组的某个维度的长度为1时,计算时沿此维度复制扩充成一样的形状

注:repeat与expand功能相似,但是repeat会把相同数据复制多份,而expand不会占用额外空间,只会在需要的时候才扩充,可以极大地节省内存。

a = t.ones(3, 2)
b = t.zeros(2, 3, 1)

自动广播法则:

  1. a是二维,b是三维,所在现在较小的a前面补1(等价于a.unsqueeze(0),a的形状变成(0,2,3))
  2. 由于a和b在第一维和第三维的形状不一样,利用广播法则,两个形状都变成了(2,3,2)
a + b
tensor([[[1., 1.],
[1., 1.],
[1., 1.]], [[1., 1.],
[1., 1.],
[1., 1.]]])

对上述自动广播可以通过以下方法实现手动广播

a.unsqueeze(0).expand(2, 3, 2) + b.expand(
2, 3, 2) # 等价于a.view(1,3,2).expand(2,3,2) + b.expand(2,3,2)
tensor([[[1., 1.],
[1., 1.],
[1., 1.]], [[1., 1.],
[1., 1.],
[1., 1.]]])

0402-Tensor和Numpy的区别的更多相关文章

  1. pytorch tensor与numpy转换

    从官网拷贝过来的,就是做个学习记录.版本 0.4 tensor to numpy a = torch.ones(5) print(a) 输出 tensor([1., 1., 1., 1., 1.]) ...

  2. pytorch_13_pytorch 中tensor,numpy,PIL的转换

    PIL:使用Python自带图像处理库读取出来的图片格式numpy:使用Python-opencv库读取出来的图片格式tensor:pytorch中训练时所采取的向量格式 import torch i ...

  3. torch.Tensor和numpy.ndarray

    1. torch.Tensor和numpy.ndarray相互转换 import torch import numpy as np # <class 'numpy.ndarray'> np ...

  4. TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

    报错原因:numpy不能读取CUDA tensor 需要将它转化为 CPU tensor. 所以如果想把CUDA tensor格式的数据改成numpy时,需要先将其转换成cpu float-tenso ...

  5. 01_tf和numpy的区别

    import numpy as npimport tensorflow as tf # 这里是为了演示numpy和tf的区别.np.random.seed(43) x_data = np.random ...

  6. Pytorch中的variable, tensor与numpy相互转化的方法

    1.将numpy矩阵转换为Tensor张量 sub_ts = torch.from_numpy(sub_img) #sub_img为numpy类型 2.将Tensor张量转化为numpy矩阵 sub_ ...

  7. can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

    predict=predict.data.numpy() 这一行报错意思是:如果想把CUDA tensor格式的数据改成numpy时,需要先将其转换成cpu float-tensor随后再转到nump ...

  8. pytorch之Tensor与Variable的区别

    首先在变量的操作上:Tensor对象支持在原对象内存区域上修改数据,通过“+=”或者torch.add()方法而Variable不支持在原对象内存区域上修改数据Variable对象可求梯度,并且对Va ...

  9. 【python学习小知识】求绝对值和numpy和tensor的相互转换

    一.python求绝对值的三种方法 1.条件判断 2.内置函数abs() 3.内置模块 math.fabs 1.条件判段,判断大于0还是小于0,小于0则输出相反数即可 # 法1:使用条件判断求绝对值 ...

  10. Tensor:Pytorch神经网络界的Numpy

    摘要:Tensor,它可以是0维.一维以及多维的数组,你可以将它看作为神经网络界的Numpy,它与Numpy相似,二者可以共享内存,且之间的转换非常方便. 本文分享自华为云社区<Tensor:P ...

随机推荐

  1. 【ActiveJdbc】01 入门

    官方快速上手文档: https://javalite.io/activejdbchttps://javalite.io/getting_started 完整介绍: https://javalite.i ...

  2. 【TypeScript】01 基础入门

    前提:使用TypeScript你需要安装NodeJS支持 然后安装TypeScript: npm intsall -g typescript 安装完成后查看版本号: tsc -v 新建一个TypeSc ...

  3. ROS(机器人操作系统)的基本了解

    参考: https://blog.csdn.net/qq_51963216/article/details/125754175 https://zhuanlan.zhihu.com/p/5956062 ...

  4. 惠普暗影精灵2pro挑电池和电源适配器

    自己几年前买的暗影2pro前几个月坏掉了,无法充电,而且偶发性掉电,经过长时间研究发现该款电脑存在挑电池和电源适配器的问题. 相关资料: https://www.chinafix.com/thread ...

  5. 读论文《IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures》——(续)实验部分

    论文地址: https://arxiv.org/pdf/1802.01561v2.pdf 论文<IMPALA: Scalable Distributed Deep-RL with Importa ...

  6. 教程 | 使用 Apache SeaTunnel 同步本地文件到阿里云 OSS

    一直以来,大数据量一直是爆炸性增长,每天几十 TB 的数据增量已经非常常见,但云存储相对来说还是不便宜的.众多云上的大数据用户特别希望可以非常简单快速的将文件移动到更实惠的 S3.OSS 上进行保存, ...

  7. FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo

    ​不管是传统互联网还是移动互联网,实时数据传输都是刚需,比如以QQ.微信为代表的即时通信工具,能够实时传输文本和图片.其中一对一的图文通信叫做私聊,多对多的图文通信叫做群聊. 除了常见的图文即时通信, ...

  8. SMU Spring 2023 Trial Contest Round 11

    A. The Text Splitting 题意:给出字符串长度,给出p和q两种切割方式,任选其中一种,把字符串分割输出结果. 题解:先进行判断,p和q是否能整个的分割n,利用p和q的函数关系判断(见 ...

  9. quartz监控日志(二)添加监听器

    上一章介绍监控job有三种方案,其实还有一个简单方案是实现quartz的TriggerListener. 上次我也试了这个方案,但是由于操作错误,导致没有监控成功,所以才选择分析源码来实现代理进行监控 ...

  10. 推荐7款美观且功能强大的WPF UI库

    前言 经常看到有小伙伴在DotNetGuide技术社区交流群里提问:WPF有什么好用或者好看的UI组件库推荐的?,今天大姚给大家分享7款开源.美观.功能强大.简单易用的WPF UI组件库. WPF介绍 ...