there are so many ways to skin this cat I'm surprised people worry about the issue of column/row operations in PDL.
The problem is not "can it be done with PDL", more "do you gain anything by using PDL to do it"? Ie. Is it more efficient?
This iterates through all the row and column permutations of a 10x10 matrix in 82 seconds:
#! perl -slw
use strict;
use Data::Dump qw[ pp ];
use Time::HiRes qw[ time ]; #$Data::Dump::WIDTH = 1000;
use Algorithm::Combinatorics qw[ permutations ];
my @a = map[ 10 *$_ .. 10 *$_ + 9 ], 0 .. 9;
## rows
my $start = time;
my $perms = permutations( [ 0 .. 9 ] );
while( my $p = $perms->next ) {
my @perm = @a[ @$p ];
}
printf "All row permutations took %f seconds\n", time - $start;
## cols
$start = time;
$perms = permutations( [ 0 .. 9 ] );
while( my $p = $perms->next ) {
my @perm = map[ @{$_}[ @$p ] ], @a;
}
printf "All column permutations took %f seconds\n", time - $start;
__END__
C:\test>PermsMatrix.pl
All row permutations took 17.198000 seconds
All column permutations took 65.284842 seconds
The OP mentioned matrices of "hundreds x hundreds".
As I understand the brute force algorithm for the Subgraph Isomorphism Problem, it requires performing all the row permutations for all the column permutations of the smaller of the two adjacency matrix graphs for every equal sized subgraph of the larger adjacency matrix. Ullmann trims the tree somewhat, but essentially still requires many of the iterations and all the transformations to be performed.
I've no doubts that this can be done with PDL; I just wonder if you gain much performance?
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|