use strict; use warnings; my ($a1,$a2,$a3,$ref); for my $x (0..20) { for my $y (0..20) { $ref->[$x][$y] = rand 100; } } use Math::Cephes::Matrix qw(mat); $a1 = mat $ref; use Math::MatrixReal; $a2 = Math::MatrixReal->new_from_rows( $ref ); use PDL; use PDL::Slatec; $a3 = pdl $ref; use Benchmark qw(cmpthese); cmpthese(100, { cephes=>sub{$a1->inv()}, matrixreal=>sub{$a2->inverse()}, pdl=>sub{matinv($a3)} } ); __END__ Rate matrixreal cephes pdl matrixreal 5.28/s -- -94% -99% cephes 83.3/s 1479% -- -87% pdl 625/s 11744% 650% --