您正在構建間隔或範圍的頻率分佈。 CPAN有模塊可以做到這一點。如果您可以重新設定問題以便同意這些模塊理解頻率分佈的方式,那麼您就可以節省一些麻煩並獲得可能對您的項目有用的其他統計工具。舉個例子:
use Statistics::Descriptive;
my @data = (0.15, 0.33, 0.67, 0.87);
my @bins = (0.25, 0.50, 0.75, 1.00);
my $stat = Statistics::Descriptive::Full->new();
$stat->add_data(@data);
my $freq = $stat->frequency_distribution_ref(\@bins);
在$freq
的分配將是一個散列引用這樣的:
$freq = {
'0.25' => 1
'0.5' => 1, # N of items x, such that PREVIOUS_BIN_VAL < x <= .50
'0.75' => 1,
'1' => 1,
};
如果你不能修改你的問題,那麼你就需要自己計算的分佈,但您可以從Statistics::Descriptive獲取重要提示。特別是,對您有一個有序的bin值列表會很有幫助。下面是一個例子:
my @data = (0.15, 0.33, 0.67, 0.87);
my @bins = (0.25, 0.50, 0.75); # Include 0.0 if you want 0.15 to be tallied.
my %freq = map {$_ => 0} @bins;
for my $d (@data){
for my $b (reverse @bins){
do { $freq{$b} ++; last } if $d >= $b;
}
}
來源
2011-09-11 12:47:51
FMc
要弄清楚爲什麼你認爲你需要散列是很困難的。 –