Kronecker product: Difference between revisions

→‎{{header|Perl}}: avoid loops in PDL
(→‎{{header|Perl}}: avoid loops in PDL)
Line 2,893:
use warnings;
use PDL;
use PDL::NiceSlice;
 
sub kron {
my ($x, $Ay) = shift@_;
 
my $B = shift;
return $x->dummy(0)
my ($r0, $c0) = $A->dims;
->dummy(0)
my ($r1, $c1) = $B->dims;
->mult($y, 0)
my $kron = zeroes($r0 * $r1, $c0 * $c1);
->clump(0, 2)
for(my $i = 0; $i < $r0; ++$i){
->clump(1, 2)
for(my $j = 0; $j < $c0; ++$j){
$kron(
($i * $r1) : (($i + 1) * $r1 - 1),
($j * $c1) : (($j + 1) * $c1 - 1)
) .= $A($i,$j) * $B;
}
}
return $kron;
}
 
my @mats = (
[pdl([[1, 2], [3, 4]]), pdl([[0,5], [6,7]])],
[pdl([[0,1,0], [1,1,1], [0,1,0]]), pdl([[10,1,1,1 5], [1,0,0,1]6, [1,1,1,17]])],
[pdl([[0, 1, 0], [1, 1, 1], [0, 1, 0]]),
pdl([[1, 1, 1, 1], [1, 0, 0, 1], [1, 1, 1, 1]])],
);
for my $mat (@mats) {
print "A = $mat->[0]\n";
print "B = $mat->[1]\n";
Anonymous user