README-work

Math::DistanceFunctions::Native

Raku package with distance functions implemented in C. Apple's Accelerate library is used if available.

The primary motivation for making this library is to have fast sorting and nearest neighbors computations over collections of LLM-embedding vectors.

Usage examples

Regular vectors

Make a large (largish) collection of large vectors and find Euclidean distances over them:

use Math::DistanceFunctions::Native;

my @vecs = (^1000).map({ (^1000).map({1.rand}).cache.Array }).Array;
my @searchVector = (^1000).map({1.rand});

my $start = now;
my @dists = @vecs.map({ euclidean-distance($_, @searchVector)});
my $tend = now;
say "Total time of computing {@vecs.elems} distances: {round($tend - $start, 10 ** -6)} s";
say "Average time of a single distance computation: {($tend - $start) / @vecs.elems} s";

CArray vectors

Use CArray vectors instead:

use NativeCall;
my @cvecs = @vecs.map({ CArray[num64].new($_) });
my $cSearchVector = CArray[num64].new(@searchVector);

$start = now;
my @cdists = @cvecs.map({ euclidean-distance($_, $cSearchVector)});
$tend = now;
say "Total time of computing {@cvecs.elems} distances: {round($tend - $start, 10 ** -6)} s";
say "Average time of a single distance computation: {($tend - $start) / @cvecs.elems} s";

I.e., we get ā‰ˆ 200 times speed-up using CArray vectors and the functions of this package.

Edit distance

The loading of this package automatically loads the (C-implemented) function edit-distance of "Math::DistanceFunctions::Edit". Here is an example usage:

edit-distance('racoon', 'raccoon')

Math::DistanceFunctions::Native v0.1.0

Raku package for distance functions based on C implementations.

Authors

  • Anton Antonov

License

Artistic-2.0

Dependencies

NativeHelpers::ArrayMath::DistanceFunctions::Edit:ver<0.1.3+>

Test Dependencies

Provides

  • Math::DistanceFunctions::Native
  • Math::DistanceFunctions::Native::CustomBuilder

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.