my @rows = grep @$_, map [ split " " ], <>; my @col = map pop @$_, @rows; my $dmat = pdl(\@rows); my @mat = map { my $i = $_; pdl([ map { my $row = $_; [ map { $i==$_ ? $col[$i] : $row->[$_] } 0 .. $#$row ] } @rows ]) } 0 .. $#{$rows[0]};