#!/usr/bin/perl use warnings; use strict; use Benchmark qw(timethis); use Math::Random qw(random_normal); use Algorithm::ClusterPoints; # Latitude stats: # Minimum: 10.318842 # Maximum: 14.124424 # Mean: 11.24719 # Standard Deviation: 0.805771 # Longitude stats: # Minimum: 21.097507 # Maximum: 24.912207 # Mean: 22.474358 # Standard Deviation: 0.974835 @ARGV = (3, 30, 300, 3_000, 30_000, 300_000) unless @ARGV; for my $n (@ARGV) { # for my $dimension (2, 3) { for my $dimension (2, 3, 4) { my @coords; for (1..$dimension) { # push @coords, [random_normal($n, 11.24719, 0.805771)]; push @coords, [map { 11.24719 + 3 * 0.805771 * rand } 1..$n]; } # my @x = random_normal($n, 11.24719, 0.805771); # my @y = random_normal($n, 22.47436, 0.974835); print STDERR "$n points generated, dimension: $dimension\n"; timethis (-1, sub { my $clp = Algorithm::ClusterPoints->new(radius => 0.01, dimension => $dimension); for my $i (0..$#{$coords[0]}) { $clp->add_point(map $_->[$i], @coords); } my @clusters = $clp->clusters_ix } ); } }