長さの違う配列同士の計算
せっかく、毎日何か書こうと思ったら1日空いちゃった。
でも、とりあえず、何か書こうと思う。
という訳で、今回は長さの違う配列を足してみる。
まずは、こんな感じで配列を定義する。
use strict; use warnings; use v5.10; use PDL; my $a = pdl( 1, 2, 3 ); my $b = pdl( 4, 5 ); say $a; say $b;
もちろん、結果はこんな感じ。
$ perl aaa.pl
[1 2 3]
[4 5]
次は、これらを足してみる。
use strict; use warnings; use v5.10; use PDL; my $a = pdl( 1, 2, 3 ); my $b = pdl( 4, 5 ); say $a + $b;
このままだと、エラーになる。
$ perl bbb.pl
PDL: PDL::Ops::plus(a,b,c): Parameter 'b':
Mismatched implicit thread dimension 0: should be 3, is 2
at bbb.pl line 10.
という訳で、あまりスマートじゃないけど、
解決方法はこんな感じ。
use strict; use warnings; use v5.10; use PDL; my $a = pdl( 1, 2, 3 ); my $b = pdl( 4, 5 ); my $dst = zeros( 0 ); foreach my $src ( $a, $b ) { if ( $dst->nelem < $src->nelem ) { $dst = $dst->append( zeros($src->nelem - $dst->nelem) ); } elsif ( $src->nelem < $dst->nelem ) { $src = $src->append( zeros($dst->nelem - $src->nelem) ); } $dst += $src; } say $dst;
結果はこうなる。
$ perl ccc.pl
[5 7 3]
という訳で、append
の紹介でした。
他に良い方法があれば教えてください。
おしまい。
Leave a Comment