行列の差を求める

行列の差を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";

関連情報