Fortran90(shape,maxval,minval,reshape)

旧2-5. Fortran毎日学習

配列で使えるその他の関数としてshape,maxval,minval,reshapeを使ってみます。
まずはshapeから。shapeは、配列の形状を戻します。

takk@deb9:~$ cat func-shape.f90
      program main
        integer a(5)
        integer b(2,3)

        write(*,*) shape(a)
        write(*,*) shape(b)

        b = 0
        write(*,*) shape(b)

        stop
      end
takk@deb9:~$

shapeは値が未初期化でも初期化していても、常に配列の各次元の要素数を戻してくれます。

takk@deb9:~$ gfortran func-shape.f90
takk@deb9:~$ ./a.out
           5
           2           3
           2           3
takk@deb9:~$

次は要素のMAX値、MIN値を調べる関数を使います。sumやproductと同じく、dim指定もmask指定もできて便利です。

takk@deb9:~$ cat func-val.f90
      program main
        integer a(2,5)
        data a /1,10,2,20,3,30,4,40,5,50/

        write(*,*) 'max'
        write(*,*) maxval(a)
        write(*,*) maxval(a,dim=1)
        write(*,*) maxval(a,dim=2)

        write(*,*) 'min'
        write(*,*) minval(a)
        write(*,*) minval(a,dim=1)
        write(*,*) minval(a,dim=2)

        write(*,*) 'mask'
        write(*,*) maxval(a,mask=a.ne.50)
        write(*,*) minval(a,mask=a.ne.1)

        stop
      end
takk@deb9:~$

結果です。

takk@deb9:~$ gfortran func-val.f90
takk@deb9:~$ ./a.out
 max
          50
          10          20          30          40          50
           5          50
 min
           1
           1           2           3           4           5
           1          10
 mask
          40
           2
takk@deb9:~$

次は配列を別の形状の配列に置き換えるreshapeです。使いこなせるようになるとかなり自由にプログラミングできるようになるのではないか、と思います。

takk@deb9:~$ cat func-reshape.f90
      program main
        integer a(6),b(2,3)
        data a /1,2,3,4,5,6/

        b = reshape(a,(/2,3/))

        write(*,*) b(1,3)

        stop
      end
takk@deb9:~$
takk@deb9:~$ gfortran func-reshape.f90
takk@deb9:~$ ./a.out
           5
takk@deb9:~$

コメント

タイトルとURLをコピーしました