PyTorch中Tensor的数据统计示例


Posted in Python onFebruary 17, 2020

张量范数:torch.norm(input, p=2) → float

返回输入张量 input 的 p 范数

举个例子:

>>> import torch
>>> a = torch.full([8], 1)
>>> b = a.view(2, 4)
>>> c = a.view(2, 2, 2)
>>> a.norm(1), b.norm(1), c.norm(1)	# 求 1- 范数
(tensor(8.), tensor(8.), tensor(8.))
>>> a.norm(2), b.norm(2), c.norm(2)	# 求 2- 范数
(tensor(2.8284), tensor(2.8284), tensor(2.8284))
>>> a.norm(3), b.norm(3), c.norm(3)# 求 ∞- 范数
(tensor(2.), tensor(2.), tensor(2.))
>>> b
tensor([[1., 1., 1., 1.],
    [1., 1., 1., 1.]])
>>> b.norm(1, 1) # 在 1 维度上求 1- 范数
tensor([4., 4.])
>>> b.norm(2, 1) # 在 1 维度上求 2- 范数
b.norm(1, 2)
>>> c
tensor([[[1., 1.],
     [1., 1.]],

    [[1., 1.],
     [1., 1.]]])
>>> c.norm(1, 0) # 在 0 维度上求 1- 范数
tensor([[2., 2.],
    [2., 2.]])
>>> c.norm(2, 0) # 在 0 维度上求 2- 范数
tensor([[1.4142, 1.4142],
    [1.4142, 1.4142]])

只有一个参数时,表示对整个张量求范数,参数表示范数的幂指数值。

有两个参数时,表示在张量某一维度对尺寸中每一部分求范数,第一个参数是范数的幂指数值,第二个参数是选择的维度。

张量统计

最基础的统计方法,比如张量中的最小值、最大值、均值、累加、累积。

举个例子:

>>> a = torch.arange(8).view(2, 4).float()
>>> a
tensor([[0., 1., 2., 3.],
    [4., 5., 6., 7.]])
>>> a.min(), a.max(), a.mean(), a.sum(), a.prod() # 分别求最小值、最大值、均值、累加、累积
(tensor(0.), tensor(7.), tensor(3.5000), tensor(28.), tensor(0.))
>>> a.argmin(), a.argmax() # 分别是把张量打平后最小值、最大值的索引
(tensor(0), tensor(7))
>>> a.argmin(1), a.argmax(1) # 不打平求 1 维度中每一部分最小值、最大值的索引
(tensor([0, 0]), tensor([3, 3]))

dim和keepdim

>>> a = torch.randn(5, 10)
>>> a
tensor([[-0.6346, -0.9074, 0.1525, 0.1901, -0.5391, -0.2437, 1.0150, -0.0427,
     -1.5336, 0.8542],
    [-0.1879, 1.9947, -0.3524, -1.2559, -0.8129, -0.3018, 0.5654, 0.8428,
     -0.3517, -0.7787],
    [ 0.0686, 0.6166, 0.2632, -0.0947, -0.5592, -1.4041, 1.5565, 1.5616,
     -1.3076, -0.1137],
    [ 0.5205, -1.5716, -1.1277, 0.8096, -0.2123, -0.0974, 0.7698, 1.1373,
     0.5165, 0.5256],
    [-0.4162, 0.3170, 0.2368, 1.1695, -0.1960, -0.3285, 0.2420, 1.6468,
     0.2646, 0.4573]])
>>> a.max(dim=1)
(tensor([1.0150, 1.9947, 1.5616, 1.1373, 1.6468]), tensor([6, 1, 7, 7, 7]))
>>> a.argmax(dim=1)
tensor([6, 1, 7, 7, 7])

max 添加 dim 后不仅显示了 1 维度中每一部分的最大值,还显示了其索引

>>> a.max(dim=1, keepdim=True)
(tensor([[1.0150],
    [1.9947],
    [1.5616],
    [1.1373],
    [1.6468]]), tensor([[6],
    [1],
    [7],
    [7],
    [7]]))
>>> a.argmax(dim=1, keepdim=True)
tensor([[6],
    [1],
    [7],
    [7],
    [7]])

保持维度一致。添加 keepdim 后,得出的结果维度不改变,原来是二维的数据,得出的结果还是二维。不添加得出的结果就是一维的。

比较操作

torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)

沿给定 dim 维度返回输入张量 input 中 k 个最大值。 如果不指定 dim,则默认为 input 的最后一维。 如果为 largest 为 False ,则返回最小的 k 个值。

返回一个元组 (values,indices),其中 indices 是原始输入张量 input 中测元素下标。 如果设定布尔值 sorted 为_True_,将会确保返回的 k 个值被排序。

torch.kthvalue(input, k, dim=None, out=None) -> (Tensor, LongTensor) 取输入张量 input 指定维上第 k 个最小值。如果不指定 dim,则默认为 input 的最后一维。

返回一个元组 (values,indices),其中indices是原始输入张量input中沿dim维的第 k 个最小值下标。

举个例子:

>>> b = torch.randn(5, 10)
>>> b
tensor([[ 0.1863, 0.0160, -1.0657, -1.8984, 2.3274, 0.6534, 1.8126, 1.8666,
     0.4830, -0.7800],
    [-0.9359, -1.0655, 0.8321, 1.6265, 0.6812, -0.2870, 0.6987, 0.6067,
     -0.1318, 0.7819],
    [-3.1129, 0.9571, -0.1319, -1.0016, 0.7267, 0.1060, -0.2926, 0.3492,
     1.0026, 0.2924],
    [-0.7101, -0.8327, 0.5463, 0.3805, -0.8720, -1.6723, 0.0365, 1.5540,
     0.1940, 1.4294],
    [ 0.4174, -0.9414, -0.0351, -1.6142, -0.7802, -2.3916, -2.4822, 0.7233,
     -0.7037, 0.2725]])
>>> b.topk(3, dim=1)
(tensor([[2.3274, 1.8666, 1.8126],
    [1.6265, 0.8321, 0.7819],
    [1.0026, 0.9571, 0.7267],
    [1.5540, 1.4294, 0.5463],
    [0.7233, 0.4174, 0.2725]]), tensor([[4, 7, 6],
    [3, 2, 9],
    [8, 1, 4],
    [7, 9, 2],
    [7, 0, 9]]))
>>> b.topk(3, dim=1, largest=False)
(tensor([[-1.8984, -1.0657, -0.7800],
    [-1.0655, -0.9359, -0.2870],
    [-3.1129, -1.0016, -0.2926],
    [-1.6723, -0.8720, -0.8327],
    [-2.4822, -2.3916, -1.6142]]), tensor([[3, 2, 9],
    [1, 0, 5],
    [0, 3, 6],
    [5, 4, 1],
    [6, 5, 3]]))
>>> a.kthvalue(8, dim=1)
(tensor([0.1034, 0.8940, 0.6155, 0.4210, 0.1955]), tensor([1, 2, 6, 4, 7]))

topk 添加 largest=False 就是返回最小,不添加就是返回最大。

kthvalue 返回以从大到小排列的指定位置的数。上面代码中即为返回第 8 小的数。

torch.eq(input, other, out=None) → Tensor

比较元素相等性。第二个参数可为一个数或与第一个参数同类型形状的张量。

torch.equal(tensor1, tensor2) → bool

如果两个张量有相同的形状和元素值,则返回 True ,否则 False。

举个例子:

>>> a = torch.ones(2, 3)
>>> b = torch.randn(2, 3)
>>> torch.eq(a, b)
tensor([[0, 0, 0],
    [0, 0, 0]], dtype=torch.uint8)
>>> torch.eq(a, a)
tensor([[1, 1, 1],
    [1, 1, 1]], dtype=torch.uint8)
>>> torch.equal(a, a)
True

eq 比较张量中的每个数据,equal 比较整个张量

以上这篇PyTorch中Tensor的数据统计示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现dict版图遍历示例
Feb 19 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
Python callable()函数用法实例分析
Mar 17 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
python如何求解两数的最大公约数
Sep 27 Python
python3 实现验证码图片切割的方法
Dec 07 Python
对Pycharm创建py文件时自定义头部模板的方法详解
Feb 12 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
Python使用xpath实现图片爬取
Sep 16 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
Python中Permission denied的解决方案
Apr 02 Python
图神经网络GNN算法
May 11 Python
pytorch实现Tensor变量之间的转换
Feb 17 #Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 #Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 #Python
python识别验证码图片实例详解
Feb 17 #Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 #Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 #Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 #Python
You might like
PHP获取服务器端信息的方法
2014/11/28 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
用于table内容排序
2006/07/21 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
理解JS绑定事件
2016/01/19 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
原生js实现自定义消息提示框
2020/11/19 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
python列表的常用操作方法小结
2016/05/21 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
Python如何转换字符串大小写
2020/06/04 Python
python创建文本文件的简单方法
2020/08/30 Python
python3实现飞机大战
2020/11/29 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
linux面试题参考答案(1)
2016/01/22 面试题
计算机网络专业推荐信
2013/11/24 职场文书
公司股权转让协议书
2014/04/12 职场文书
初中教师业务学习材料
2014/05/12 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
python b站视频下载的五种版本
2021/05/27 Python
javascript函数式编程基础
2021/09/15 Javascript
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技