パスワードを忘れた? アカウント作成
637055 journal

hhayakawaの日記: Perlで多次元配列

日記 by hhayakawa
Perlで転置行列を作ろうとして多次元配列と格闘しました。
以下、それに関連したスクリプト例です。

#!/usr/local/bin/perl

my $matrix;
# 行を追加
push(@{$matrix->[0]}, split(",", "1,2,3,4,5"));
push(@{$matrix->[1]}, split(",", "2,4,6,8,10"));
push(@{$matrix->[2]}, split(",", "3,6,9,12,15"));
# 行列を表示
&print_matrix($matrix);
# 転置行列を得る
my $t_matrix = &tranpose_matrix($matrix);
# 転置行列を表示
&print_matrix($t_matrix);
# 元の行列を行毎に表示
for my $i(0..@$matrix-1) {
        &print_vector($matrix->[$i]);
}

# 転置行列を得る
sub tranpose_matrix {
        my $arg = shift;
        my $ret;
        my ($i, $j);
        for $i(0..@{$arg->[0]}-1) {
                for $j(0..@{$arg}-1) {
                        push(@{$ret->[$i]}, $arg->[$j][$i]);
                }
        }
        return $ret;
}

# 1次元配列の内容を表示
sub print_vector {
        my $v = shift;
        print '[' . scalar(@$v) . ']' . " : ";
        print join (", ", @$v);
        print "\n";
}

# 2次元配列の内容を表示
sub print_matrix {
        my $m = shift;
        my ($i, $j);
        $i = scalar(@{$m});
        $j = scalar(@{$m->[0]});
        print qq![$i]x[$j]:\n!;
        for $i(0..@{$m}-1) {
                printf qq!%4d : !, $i;
                for $j(0..@{$m->[0]}-1) {
                        printf qq!%4d!, $m->[$i][$j];
                }
                print qq!\n!;
        }
}
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

※ただしPHPを除く -- あるAdmin

読み込み中...