行列の和を求める

行列の和を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_add {
  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_add = mat_add($mat1, $mat2);

# [Matrix Add]Row:3, Column:2, Values:8 10 12 14 16 18
print "[Matrix Add]Row:$mat_add->{rows_length}, Column:$mat_add->{columns_length}, Values:@{$mat_add->{values}}\n";

関連情報