我有一堆数字想用来生成标准分数的直方图。
因此,我计算了数的平均值和标准差,并用这个公式将每个x标准化
x’=(x平均值)/标准偏差
结果是一个介于-4和4之间的数字。我想画出这个结果。我正在寻找一种方法来分组的数字,以避免小酒吧。
我的计划是在[4,4]间隔内以连续的四分之一单位为中心放置箱子,即[4,-3.75,…,3.75,4]
示例:0.1=>bin“0.0”,0.3=>bin“0.25”,-1.3=>bin“-1.5”
实现这一目标的最佳途径是什么?

最佳答案

这是一个不使用任何第三方库的解决方案。数字应该在数组vals中。

MULTIPLIER  = 0.25
multipliers = []
0.step(1, MULTIPLIER) { |n| multipliers << n }

histogram = Hash.new 0

# find the appropriate "bin" and create the histogram
vals.each do |val|
  # create an array with all the residuals and select the smallest
  cmp = multipliers.map { |group| [group, (group - val%1).abs] }
  bin = cmp.min { |a, b| a.last <=> b.last }.first
  histogram[val.truncate + bin] += 1
end

我认为它执行适当的舍入。但我只尝试过:
vals = Array.new(10000) { (rand * 10) % 4 * (rand(2) == 0 ? 1 : -1) }

分布有点倾斜,但这可能是随机数发生器的错误。

关于ruby - 分组直方图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/716118/

10-16 16:07