行列の差を求める
行列の差をPerlで求めてみましょう。行列は列優先の行列だと考えてください。
# 数学の行列表現 # 3行2列の行列 # 1 4 # 2 5 # 3 6 # 列優先でのデータのもちかた my $mat = { values => [1, 2, 3, 4, 5, 6], rows_length => 3, columns_length => 2, };
行列の差を求める計算は、配列の行列の各要素の差を求める計算を行うだけです。
行列の差を求めるPerlプログラム
行列の差を求めるPerlプログラムです。
use strict; use warnings; # 行列の差 sub mat_sub { my ($mat1, $mat2) = @_; my $mat_out = {}; $mat_out->{rows_length} = $mat1->{rows_length}; $mat_out->{columns_length} = $mat2->{columns_length}; for (my $i = 0; $i < @{$mat1->{values}}; $i++) { $mat_out->{values}->[$i] = $mat1->{values}->[$i] - $mat2->{values}->[$i]; } return $mat_out; } my $mat1 = { values => [1, 2, 3, 4, 5, 6], rows_length => 3, columns_length => 2, }; my $mat2 = { values => [7, 8, 9, 10, 11, 12], rows_length => 3, columns_length => 2, }; # 行列の差 my $mat_sub = mat_sub($mat1, $mat2); # [Matrix Subtract]Row:3, Column:2, Values:-6 -6 -6 -6 -6 -6 print "[Matrix Subtract]Row:$mat_sub->{rows_length}, Column:$mat_sub->{columns_length}, Values:@{$mat_sub->{values}}\n";