【Perl】 行列の計算 【PDL::Matrix】

Perlで行列の計算をする場合、
PDL::Matrixを使用すると簡単です。

使い方はサンプルコードさんとこにまとめられているので
そこを参考にしています。

まずは行列の作成。

use PDL;
use PDL::Matrix;

my $mat1 = mpdl [1, 2],[3,4];
print $mat1;

簡単にできます。

次に計算をしてみます。
行列の足し算引き算は簡単にできます。

[
    [a,b],
    [c,d]
]

[
    [e,f],
    [g,h]
]
足したり引いたりする場合
[
    [a±e,b±f],
    [c±g,d±h]
]
となります。

というわけでこんな感じ。

use PDL;
use PDL::Matrix;

my $mat1 = mpdl [1, 2],[3,4];
my $mat2 = mpdl [2, 3],[4,5];
my $add = $mat1 + $mat2;
print $add;

行列の掛け算は少し面どくさいです。
[
    [a,b]
]

[
    [c]
    [d]
]
を掛けると
[
    [a * c + b * d]
]
use PDL;
use PDL::Matrix;

my $mat1 = mpdl [3,4];
my $vec1 = vpdl [4,5];
my $multiply = $mat1 x $vec1;
print $multiply;
[
    [a,b],
    [c,d]
]

[
    [e],
    [f]
]
を掛けると
[
    [a * e + b * f],
    [c * e + d * f]
]
use PDL;
use PDL::Matrix;

my $mat1 = mpdl [1,2],[3,4];
my $vec1 = vpdl [2,3];
my $multiply = $mat1 x $vec1;
print $multiply;
[
    [a,b],
    [c,d]
]

[
    [e,f],
    [g,h]
]
を掛けると
[
    [a * e + b * g],[a * f + b * h],
    [c * e + d * g],[c * f + d * h]
]
になる。
use PDL;
use PDL::Matrix;

my $mat1 = mpdl [1,2],[3,4];
my $mat2 = mpdl [2,3],[4,5];
my $multiply = $mat1 x $mat2;
print $multiply;

ここまでくると慣れの問題なんだろうなぁ。
とりあえず理解よりも暗記。