Fortran90(sumその2)

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

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA