多次元配列のsumをしてみます。このように値を格納した2×5の配列の要素の総和を計算します。
+--+--+--+--+--+ | 1| 2| 3| 4| 5| +--+--+--+--+--+ |10|20|30|40|50| +--+--+--+--+--+
sumの引数に配列名を指定するだけで求めることができます。
takk@deb9:~$ cat func-sum-2-1.f90 program main integer a(2,5) data a /1,10,2,20,3,30,4,40,5,50/ write(*,*) sum(a) stop end takk@deb9:~$
takk@deb9:~$ gfortran func-sum-2-1.f90 takk@deb9:~$ ./a.out 165 takk@deb9:~$
dim=で指定することで、次元別の計算もできます。
takk@deb9:~$ cat func-sum-2-2.f90 program main integer a(2,5) data a /1,10,2,20,3,30,4,40,5,50/ write(*,*) sum(a,dim=1) write(*,*) sum(a,dim=2) stop end takk@deb9:~$
takk@deb9:~$ gfortran func-sum-2-2.f90 takk@deb9:~$ ./a.out 11 22 33 44 55 15 150 takk@deb9:~$
mask=を使うことで、各要素のフィルタリングもすることができます。
10未満の値だけsumするプログラムです。
takk@deb9:~$ cat func-sum-2-3.f90 program main integer a(2,5) data a /1,10,2,20,3,30,4,40,5,50/ write(*,*)sum(a,mask=a .lt. 10) stop end takk@deb9:~$
maskを使って偶数の要素の総和、奇数の要素の総和をそれぞれ求めてみます。
takk@deb9:~$ cat func-sum-2-4.f90 program main integer a(10) data a /1,2,3,4,5,6,7,8,9,10/ write(*,*)sum(a,mask=mod(a,2) .eq. 0) write(*,*)sum(a,mask=mod(a,2) .eq. 1) stop end takk@deb9:~$
結果です。
takk@deb9:~$ gfortran func-sum-2-4.f90 takk@deb9:~$ ./a.out 30 25 takk@deb9:~$
コメント