julia-lang中的直方图计算



参考julia-lang文档:

hist(v[, n])→e, counts

计算v的直方图,可选择使用大约n个bin。返回值是一个范围e,它对应于箱子的边,并且计数包含每个箱子中v的元素的数量。注意:Julia在计算中不会忽略NaN值。

我选择一个样本范围的数据

testdata=0:1:10;

然后使用hist函数计算1到5个箱子的直方图

hist(testdata,1) # => (-10.0:10.0:10.0,[1,10])
hist(testdata,2) # => (-5.0:5.0:10.0,[1,5,5])
hist(testdata,3) # => (-5.0:5.0:10.0,[1,5,5])
hist(testdata,4) # => (-5.0:5.0:10.0,[1,5,5])
hist(testdata,5) # => (-2.0:2.0:10.0,[1,2,2,2,2,2])

如你所见,当我想要1个箱子时它计算2个箱子,当我想要2个箱子时它计算3个。

为什么会发生这种情况?

作为编写底层函数的人:目标是获得在基数为10的计数系统(即10k, 2×10k, 5×10k)中"不错"的bin宽度。如果你想要更多的控制,你也可以指定确切的bin边缘

文档中的关键字是approximate。您可以在Julia的base模块中查看hist实际为您做了什么。

当你执行hist(test,3)时,你实际上是在调用

hist(v::AbstractVector, n::Integer) = hist(v,histrange(v,n))

也就是说,在第一步中,n参数通过histrange函数转换为FloatRange,其代码可以在这里找到。正如您所看到的,这些步骤的计算并不完全简单,因此您应该稍微摆弄一下这个函数,以弄清楚它是如何构建构成直方图基础的范围的。

最新更新