配列で使えるその他の関数として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:~$
コメント