pythonのように、aからbまでの一連の数字を含む配列を生成するFortranの組み込み関数はありますかrange()
>>> range(1,5)
[1, 2, 3, 4]
>>> range(6,10)
[6, 7, 8, 9]
?
いいえ、ありません。
ただし、同じことを行うコンストラクターで配列を初期化することはできます。
program arraycons
implicit none
integer :: i
real :: a(10) = (/(i, i=2,20, 2)/)
print *, a
end program arraycons
float をサポートする必要がある場合はlinspace
、NumPy や MATLAB と同様の Fortran サブルーチンを次に示します。
! Generates evenly spaced numbers from `from` to `to` (inclusive).
!
! Inputs:
! -------
!
! from, to : the lower and upper boundaries of the numbers to generate
!
! Outputs:
! -------
!
! array : Array of evenly spaced numbers
!
subroutine linspace(from, to, array)
real(dp), intent(in) :: from, to
real(dp), intent(out) :: array(:)
real(dp) :: range
integer :: n, i
n = size(array)
range = to - from
if (n == 0) return
if (n == 1) then
array(1) = from
return
end if
do i=1, n
array(i) = from + range * (i - 1) / (n - 1)
end do
end subroutine
使用法:
real(dp) :: array(5)
call linspace(from=0._dp, to=1._dp, array=array)
配列を出力します
[0., 0.25, 0.5, 0.75, 1.]
ここdp
は
integer, parameter :: dp = selected_real_kind(p = 15, r = 307) ! Double precision