sub kronecker_product { my ($x, $y) = @_; my ($x0, $x1) = $x->dims; my ($y0, $y1) = $y->dims; return ( $y * $x->dummy(0, $y0)->dummy(1, $y1) )->xchg(1, 2)->reshape($x0 * $y0, $x1 * $y1) }