【发布时间】:2013-10-06 17:26:00
【问题描述】:
如何创建整数数组的直方图?例如:
data = [0,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,8,9,9,10]
我想根据0、1、2 等的条目数创建一个直方图。有没有简单的方法在 Ruby 中做到这一点?
输出应该是两个数组。第一个数组应该包含组(bins),第二个数组应该包含出现次数(频率)。
对于上面给出的data,我希望得到以下输出:
bins # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
frequencies # => [1, 1, 5, 6, 4, 2, 3, 5, 1, 2, 1]
【问题讨论】:
-
你想要的输出格式是什么?
-
当您提出问题、索取代码时,您需要展示您的研究成果以及您为解决问题所做的任何尝试,以及您解释它们为什么不起作用的原因。
-
我会初始化一个类似
h = Hash.new(0)的“计数哈希”并计算每个元素的出现次数:data.each{|v| h[v] += 1}。之后,h将如下所示:=> {0=>1, 1=>1, 2=>5, 3=>6, 4=>4, 5=>2, 6=>3, 7=>5, 8=>1, 9=>2, 10=>1}您可以使用h.keys和h.values从该哈希中提取箱和频率。我希望你觉得这很有用。 -
Ruby 2.7.0 引入
Enumerable#tally:data.tally=>{0=>1, 1=>1, 2=>5, 3=>6, 4=>4, 5=>2, 6=>3, 7=>5, 8=>1, 9=>2, 10=>1}