torch.histc深入理解

用于统计落入区域的值的个数。

torch.histc(input, bins=100, min=0, max=0, *, out=None)Tensor

Parameters:

  • input (Tensor) – the input tensor.输入的值 input 的dtype必须为浮点型

  • bins (int) – number of histogram bins 等分为几个区域

  • min (Scalar) – lower end of the range (inclusive) 最小值边界

  • max (Scalar) – upper end of the range (inclusive) 最大值边界

示例

import  torch
from torch import nn
a=torch.histc(torch.tensor([1.5, 2, 1,0,1,2.25]), bins=4, min=0, max=3)
print(a)

此时分为4等分,3-0/4=0.75

即分区为[0,0.75), [0.75, 1.5), [1.5,2.25), [2.25, 3]

注意最后一个区间两端都为闭区间。

结果

tensor([1., 2., 2., 1.])

验证边界是否是左闭右开

import  torch
from torch import nn
a=torch.histc(torch.tensor([1.5, 2, 1,0,1,2.24]), bins=4, min=0, max=3)
print(a)

最后一个数改为2.24后可以看到被分到了[1.5,2.25),2.25被分到[2.25, 3],符合边界

tensor([1., 2., 3., 0.])

import  torch
from torch import nn
a=torch.histc(torch.tensor([0.75,1.5]), bins=4, min=0, max=3)
print(a)
tensor([0., 1., 1., 0.])

0.75落到[0.75, 1.5),1.5同理,可以验证结果是正确的。

延申用法

加入我们有0~4 5个数,比如a=[0,1,3,4,4,2,3,1,0,2,3,1],我如何统计各个数出现了多少次?

可以这样写

import  torch
from torch import nn
a=torch.tensor([0.,1,3,4,4,2,3,1,0,2,3,1])
k=5 #一共有5种数
area_intersection = torch.histc(a, bins=k, min=0, max=k-1)
print(area_intersection)
tensor([2., 3., 2., 3., 2.])

可以看到结果是对的。

证明:

当数字为0~k-1 种类为k个整数,也就是分成k段,每段长度为(1-1/k),比如[0,1-1/k),

[1-1/k,2-2/k)..

对任意一个整数数n,有如下的结论(在下图最底部,上面为推导)。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值