転置行列を求める
転置行列をPerlで求めてみましょう。転置行列とは、行と列が入れ替わった行列のことです。転置行列の計算は、逆誤伝播法で必要になります。
行列は列優先の行列だと考えてください。
# 数学の行列表現
# 3行2列の行列
# 1 4
# 2 5
# 3 6
# 列優先でのデータのもちかた
my $mat = {
values => [1, 2, 3, 4, 5, 6],
rows_length => 3,
columns_length => 2,
};
この行列を転置するとすると以下のようになります。行と列が入れ替わります。
# 転置行列
# 数学の行列表現
# 2行3列の行列
# 1 2 3
# 4 5 6
# 列優先でのデータのもちかた
my $mat_transpose = {
values => [1, 4, 2, 5, 3, 6],
rows_length => 2,
columns_length => 3,
};
転置行列を求めるPerlプログラム
転置行列を求めるPerlプログラムを書いてみます。
use strict;
use warnings;
sub mat_transpose {
my ($mat) = @_;
my $rows_length = $mat->{rows_length};
my $columns_length = $mat->{columns_length};
my $length = $rows_length * $columns_length;
my $mat_trans ={};
$mat_trans->{rows_length} = $columns_length;
$mat_trans->{columns_length} = $rows_length;
my $values = $mat->{values};
my $mat_trans_values = [];
for (my $row_index = 0; $row_index < $rows_length; $row_index++) {
for (my $column_index = 0; $column_index < $columns_length; $column_index++) {
$mat_trans_values->[$row_index * $columns_length + $column_index] = $values->[$column_index * $rows_length+ $row_index];
}
}
$mat_trans->{values} = $mat_trans_values;
return $mat_trans;
}
my $mat = {
values => [1, 2, 3, 4, 5, 6],
rows_length => 3,
columns_length => 2,
};
my $mat_trans = mat_transpose($mat);
# Row:2, Column:3, Values:1 4 2 5 3 6
print "Row:$mat_trans->{rows_length}, Column:$mat_trans->{columns_length}, Values:@{$mat_trans->{values}}\n";
Perl AI深層学習入門