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


コメント