IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

行列転置

これより短い方法はあるのだろうか?

$ perl -MData::Dumper -MList::Util -e '
$foo = +[+[11,12],+[21,22,23],+[31],+[41,42]];
print Dumper($foo);
$bar=+[];
for $i (0..List::Util::max(map{$#$_}@$foo)){
  push @$bar , +[ map {$_->[$i]} @$foo ]
};
print Dumper($bar);
'
$VAR1 = [
          [
            11,
            12
          ],
          [
            21,
            22,
            23
          ],
          [
            31
          ],
          [
            41,
            42
          ]
        ];
$VAR1 = [
          [
            11,
            21,
            31,
            41
          ],
          [
            12,
            22,
            undef,
            42
          ],
          [
            undef,
            23,
            undef,
            undef
          ]
        ];