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
}