[PyTroch系列-9]:PyTorch基础 - 张量元素的统计运算

 作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119443802


目录

第1章 Tensor运算概述

1.1 概述

1.3  “in place“运算 

1.4 Tensor的广播机制: 不同维度的tensor实例运算

1.5 环境准备

1.6 统计运算概述

第1章 平均值:mean

第2章 汇总:sum

第3章 积:prod

第4章 最大值:max

第5章 最小值:min

第6章 最大值索引:argmax

最7章 最小值索引:argmin

第8章 算术平均值:median

第9章 众数值:mode

第10章 标准方差:std

第11章 方差:var

第12章 频度:bincount


第1章 Tensor运算概述

1.1 概述

PyTorch提供了大量的张量运算,基本上可以对标Numpy多维数组的运算,以支持对张量的各种复杂的运算。

这些操作运算中大多是对数组中每个元素执行相同的函数运算,并获得每个元素函数运算的结果序列,这些序列生成一个新的同维度的数组。

https://www.runoob.com/numpy/numpy-linear-algebra.html

1.2 运算分类

(1)算术运算:加、减、系数乘、系数除

(2)函数运算:sin,cos

(3)取整运算:上取整、下取整

(4)统计运算:最大值、最小值、均值

(5)线性代数运算:矩阵、点乘、叉乘

1.3  “in place“运算 

“in place“运算不是某个特定的函数运算,而是每个函数都有自己的“in place“运算的版本。

xxx_():执行完该操作,直接修改tensor自身的值。

基本上,每个函数都有自己的in place版本。

torch.cos() =》torch.cos_()

torch.floor() =》torch.floor_()

1.4 Tensor的广播机制: 不同维度的tensor实例运算

1.5 环境准备

import numpy as np
import torch
 
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())

1.6 统计运算概述

Torch提供了很多统计函数,用于从Tensor中查找最小元素,最大元素,百分位标准差和方差等

 

第1章 平均值:mean

(1)原理概述

算术平均值是沿轴的元素的总和除以元素的数量。

算术平均值平均的前提是:求出所有带符号数值的总和。

简单算术平均公式:

设一组数据为X1,X2,...,Xn,简单的算术平均数的计算公式为:

(2) 函数使用说明

mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。

 (3)案例

  • 全统计
# 求所有元素的算术平均值

a = torch.Tensor([[1,2,3],[4,5,6]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.mean(a)) 
print (a.mean()) 

print ('\n')

输出:

源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据
tensor(3.5000)
tensor(3.5000)


  • 按列统计(dim=0方向)
# 按列求算术平均值

a = torch.Tensor([[1,2,3],[4,5,6]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.mean(a,dim=0)) 

print ('\n')
输出:

源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor([2.5000, 3.5000, 4.5000])
  • 按行方向(dim=1)
# 按行求算术平均值

a = torch.Tensor([[1,2,3],[4,5,6]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.mean(a,dim=1)) 

print ('\n')
输出:

源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor([2., 5.])

第2章 汇总:sum

sum求出所有元素的算术和。

(1)全统计

# 求所有元素的算术和

a = torch.Tensor([[1,2,3],[4,5,6]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.sum(a)) 
print (a.sum()) 

print ('\n')
输出:

源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor(21.)
tensor(21.)

(2)按列统计(按照dim=0方向)

# 求所有元素的算术和

a = torch.Tensor([[1,2,3],[4,5,6]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.sum(a,dim=0)) 
print (a.sum(dim=0)) 

print ('\n')
输出:

源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor([5., 7., 9.])
tensor([5., 7., 9.])

(3)按行统计(按照dim=1方向)

# 求所有元素的算术和

a = torch.Tensor([[1,2,3],[4,5,6]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.sum(a,dim=1)) 
print (a.sum(dim=1)) 

print ('\n')
输出:

源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor([ 6., 15.])
tensor([ 6., 15.])


第3章 积:prod

prod()函数用来计算所有元素的乘积。

输出:

源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor(720.)
tensor(720.)
输出结果:

源数据:

tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor(720.)
tensor(720.)

第4章 最大值:max

max()找出所有元素中,算术值最大的数值。

# 求所有元素的最大值

a = torch.Tensor([[1,2,3],[4,5,6]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.max(a)) 
print (a.max()) 

print ('\n')
源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor(6.)
tensor(6.)

第5章 最小值:min

min()找出所有元素中,算术值最小的数值。

# 求所有元素的最小值

a = torch.Tensor([[1,2,3],[4,5,6]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.min(a)) 
print (a.min()) 

print ('\n')
输出:

源数据:
tensor([[1., 2., 3.],
        [4., 5., 6.]])


结果数据:
tensor(1.)
tensor(1.)

第6章 最大值索引:argmax

argmax求所有元素中最大值的索引,index从0开始,线性排列。

# 求所有元素中最大值的索引,index从0开始,线性排列

a = torch.Tensor([[1,2,3,4],[5,6,7,8]])  
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.argmax(a)) 
print (a.argmax()) 
输出:

源数据:
tensor([[1., 2., 3., 4.],
        [5., 6., 7., 8.]])


结果数据:
tensor(7)
tensor(7)

最7章 最小值索引:argmin

# 求所有元素中最小值的索引,index从0开始,线性排列

a = torch.Tensor([[1,2,3,4],[5,6,7,8]])   
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.argmin(a)) 
print (a.argmin()) 
输出:

源数据:
tensor([[1., 2., 3., 4.],
        [5., 6., 7., 8.]])


结果数据:
tensor(0)
tensor(0)

第8章 算术平均值:median

# 求所有元素中的中间值索引

a = torch.Tensor([[4,3,2,1],[8,7,6,5]])   
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.median(a)) 
print (a.median()) 
输出:

源数据:
tensor([[4., 3., 2., 1.],
        [8., 7., 6., 5.]])


结果数据:
tensor(4.)
tensor(4.)

第9章 众数值:mode

众数(Mode)是指在统计分布上具有明显集中趋势点的数值,代表数据的一般水平。 也是一组数据中出现次数最多的数值,有时众数在一组数中有好几个。

众数是样本观测值在频数分布表中频数最多的那一组的组中值,主要应用于大面积普查研究之中。

众数是在一组数据中,出现次数最多的数据,是一组数据中的原数据,而不是相应的次数。

一组数据中的众数不止一个,如数据2、3、-1、2、1、3中,2、3都出现了两次,它们都是这组数据中的众数。

一般来说,一组数据中,出现次数最多的数就叫这组数据的众数。

例如:1,2,3,3,4的众数是3。

# 求每个维度中的众数值

a = torch.Tensor([[1,1,2,1,0,4],[7,7,7,6,6,1]])   
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.mode(a)) 
输出:

源数据:
tensor([[1., 1., 2., 1., 0., 4.],
        [7., 7., 7., 6., 6., 1.]])


结果数据:
torch.return_types.mode(
values=tensor([1., 7.]),
indices=tensor([3, 2]))

备注:是两维度的数据:

第一个维度是数值values序列,指明源张量中,每个维度序列中的众数值。

第二个维度是索引indices序列,指明源张量中,众数值在序列中最大index位置。

上图中,第一个维度的序列中,众数值是1,众数在序列中的最大的index为3.

上图中,第二个维度的序列中,众数值是7,众数在序列中的最大的index为2

第10章 标准方差:std

(1)理论概述

标准差是一组数据离平均值的分散程度的一种度量。

标准差(Standard Deviation) ,是离均差平方的算术平均数(即:方差)的算术平方根,用σ表示。

标准差也被称为标准偏差,或者实验标准差,在概率统计中最常使用作为统计分布程度上的测量依据。

æ åå·®

 

 在实验中单次测量总是难免会产生误差,为此我们经常测量多次,然后用测量值的平均值表示测量的量,并用误差条来表征数据的分布,其中误差条的高度为±标准误差。这里即标准差。

 

如果数组是 [1,2,3,4],则其平均值为 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],并且再求其平均值的平方根除以 4,即 sqrt(5/4) ,结果为 1.1180339887498949。

# 求所有元素的标准差

a = torch.Tensor([[1,2,3,4,5],[-1,-2,-3,-4,-5]])   
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print(torch.mean(a))  #均值
print (torch.std(a))  #标准差
输出:

源数据:
tensor([[ 1.,  2.,  3.,  4.,  5.],
        [-1., -2., -3., -4., -5.]])


结果数据:
tensor(0.)
tensor(3.4960)

第11章 方差:var

(1)概述

统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。 #mean:求平均

换句话说,标准差方差的平方根

(2)方差与标准方差的关系:

备注:正态分布使用的是标准方差,而不是方差。

# 求所有元素的方差

a = torch.Tensor([[1,2,3,4,5],[-1,-2,-3,-4,-5]])   
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print(torch.mean(a))  #均值
print (torch.var(a))  #方差
print (torch.sqrt(torch.var(a)))  #方差的平方根
print (torch.std(a))  #标准差
输出:

源数据:
tensor([[ 1.,  2.,  3.,  4.,  5.],
        [-1., -2., -3., -4., -5.]])


结果数据:
tensor(0.)
tensor(12.2222)
tensor(3.4960)
tensor(3.4960)

第12章 频度:bincount

bincount求你所有元素出现的次数

# 求每个维度中的频度

a = torch.tensor([1,1,2,1,20,4,2,4,5,6,3,2,1])   
print ("源数据:")
print (a)
print ('\n')


print ("结果数据:")
print (torch.bincount(a)) 
输出:

源数据:
tensor([ 1,  1,  2,  1, 20,  4,  2,  4,  5,  6,  3,  2,  1])


结果数据:
tensor([0, 4, 3, 1, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])

备注:

(1)目前只支持整数序列,这与其输出格式是整数索引有关。

(2)输出结果是一个从最小值0到最大值的统计列表,这里的最大值是20.

数字0:出现次数为0.

数字1:出现次数为4

数字2:出现次数为3

数值3:出现次数为1

数字4:出现次数为2

数字5:出现次数为1

数字6:出现次数为1

数字7-19:出现次数为0

数字20:出现次数为1


作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119443802

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch提供了丰富的张量算术运算,可以对张量进行各种复杂的运算。你可以使用PyTorch的算术函数来执行加法、减法、乘法和除法操作。例如,你可以使用add()函数执行张量的加法运算,subtract()函数执行减法运算,multiply()函数执行乘法运算,divide()函数执行除法运算。 此外,PyTorch还支持复杂数的算术运算,通过安装"pytorch-complex-tensor"库,你可以使用该库提供的ComplexTensor类来进行复杂数的模拟算术运算,该库支持渐变。你可以使用ComplexTensor类来创建初始张量,并在其执行复杂的算术运算。 下面是一个使用PyTorch进行张量算术运算的例子: ``` import torch # 创建两个张量 a = torch.tensor([1, 2, 3]) b = torch.tensor([4, 5, 6]) # 执行加法运算 c = torch.add(a, b) # 执行减法运算 d = torch.subtract(a, b) # 执行乘法运算 e = torch.multiply(a, b) # 执行除法运算 f = torch.divide(a, b) # 输出结果 print(c) # tensor([5, 7, 9]) print(d) # tensor([-3, -3, -3]) print(e) # tensor([4, 10, 18]) print(f) # tensor([0.25, 0.4, 0.5]) ``` 通过使用PyTorch张量算术运算,你可以对张量进行各种复杂的运算,并得到所需的结果。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [[PyTroch系列-7]:PyTorch基础 - 张量的算术运算](https://blog.csdn.net/HiWangWenBing/article/details/119428023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pytorch-complex-tensor:Pytorch的非官方复张量和标量支持](https://download.csdn.net/download/weixin_42128537/18698908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值