productを使って配列の積を求めます。
全要素を掛けた結果、つまり総乗を求めたいので、このような計算となります。
takk@deb9:~$ cat func-product-1.f90 program main integer a(5) data a /1,2,3,4,5/ write(*,*) a(1) * a(2) * a(3) * a(4) * a(5) stop end takk@deb9:~$ gfortran func-product-1.f90 takk@deb9:~$ ./a.out 120 takk@deb9:~$
productを使えば一発です。
takk@deb9:~$ cat func-product-2.f90 program main integer a(5) data a /1,2,3,4,5/ write(*,*) product(a) stop end takk@deb9:~$ gfortran func-product-2.f90 takk@deb9:~$ ./a.out 120 takk@deb9:~$
sumと同じくdimやmaskを指定してフィルタリングすることができます。
takk@deb9:~$ cat func-product-3.f90 program main integer a(2,5) data a /1,10,2,20,3,30,4,40,5,50/ write(*,*) product(a,dim=1) write(*,*) product(a,dim=2,mask=a.le.30) stop end takk@deb9:~$ gfortran func-product-3.f90 takk@deb9:~$ ./a.out 10 40 90 160 250 120 6000 takk@deb9:~$
product関数というと、他言語だと掛け合わせのリストを生成するタイプだと思いますが、Fortranでは単純に掛け算なんですね。sum関数の総和に対して、product関数の総乗なので、こちらの関数仕様の方が分かりやすい気がします。
コメント