用于统计落入区域的值的个数。
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,有如下的结论(在下图最底部,上面为推导)。