2014/05/25(日)Perl Data Language 基礎編 #02 「行列の演算とバッド値」
PDLの関数を見る前に行列の演算です。
ドキュメントは以下の通り。
- PDL::Core(メソッド、型変換のための関数、PDLの生成、型変換、スレッドなど)
 - PDL::BadValues(PDLにおけるバッド値サポートの議論)
 
バッド値は欠損値に使うのが良さそう。バッド値があるとバッドフラグがついて、さらにバッドフラグがついたピドル(PDLの変数のこと)で演算したりするとバッドフラグが伝染するみたい。ちなみに他の文字列(nyan)はバッド値がつくのか疑問に思ったので試したけど、ちゃんと'bad'や'BAD'と区別してバッドフラグはつかないようになっている模様。
他の注意点は行列同士の積は「x」を使うことぐらい。
統計についてまとめていく前にコア関数をまとめて、主要なドキュメントをまとめて、グラフ描画についてまとめます。
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/say/;
use PDL;
use DDP filters => { -external => [ 'PDL' ] };
my $a = pdl [
    [ 1, 2 ],
    [ 3, 4 ]
];
my $b = pdl [
    [ 5 ],
    [ 6 ]
];
say "$a: $a";
say "$b: $b";
say "$a x $b";
say $a x $b; # 行列の積は*でなくてxを使う
my $d = $a;
$d = $d ** 3; # 3乗
say "$d($a^3): $d";
say "$a: $a"; # $a には影響しない
my $e = pdl [
    [ 'inf',    2    ],
    [ 'nan', ' -inf' ]
];
my $f = pdl [
    [ '-inf',  'bad'   ],
    [  3    ,  'nyan' ]
];
say "$e: $e";
say "$f: $f";
say "$e + $f:";
say $e + $f;
say "バッドフラグ";
say PDL->new(3)->badflag;
say PDL->new('bad')->badflag;
eval { PDL->new('nyan')->badflag; };
print $@ if $@;
my $g = pdl [ 'nyan' ];
say $g->badflag;
say p $g;
実行結果↓
$a: 
[
 [1 2]
 [3 4]
]
$b: 
[
 [5]
 [6]
]
$a x $b
[
 [17]
 [39]
]
$d($a^3): 
[
 [ 1  8]
 [27 64]
]
$a: 
[
 [1 2]
 [3 4]
]
$e: 
[
 [ inf    2]
 [ nan -inf]
]
$f: 
[
 [-inf    0]
 [   3    0]
]
$e + $f:
[
 [-nan    2]
 [ nan -inf]
]
バッドフラグ
0
1
PDL::Core::new_pdl_from_string: found disallowed character(s) 'nyan' in nyan at core.pl line 50.
0
PDL {
    Data     : [0]
    Type     : double
    Shape    : [1]
    Nelem    : 1
    Min      : 0
    Max      : 0
    Badflag  : No
    Has Bads : No
}