多次元配列の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:~$


コメント