in reply to Re^2: Clustering Numbers with Overlapping Members
in thread Clustering Numbers with Overlapping Members
The idea is to iterate over the (unique) centroids - ignoring the very first element in @nlist - and extract all numbers 'in_range' from the original array.use warnings; use strict; my @nlist = (0,0,1,2,3,3,4,5,6,8,8,10); my @key_list = ('A'..'Z'); my $tolerance = 1; my %hoa; my %uniq; @uniq{@nlist[1..$#nlist]} = (); for my $centroid (sort {$a <=> $b} keys %uniq) { my $key = shift @key_list; $hoa{$key} = [grep in_range($centroid, $_), @nlist ]; } print "$_ => [@{$hoa{$_}}]\n" for sort keys %hoa; sub in_range { my ($centroid, $testnum) = @_; return abs($centroid - $testnum) <= $tolerance; }
Update: Small bugfix.
-- Hofmator
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Clustering Numbers with Overlapping Members
by monkfan (Curate) on Aug 07, 2006 at 14:35 UTC |