15

pythonのように、aからbまでの一連の数字を含む配列を生成するFortranの組み込み関数はありますかrange()

>>> range(1,5)
[1, 2, 3, 4]
>>> range(6,10)
[6, 7, 8, 9]

?

4

3 に答える 3

30

いいえ、ありません。

ただし、同じことを行うコンストラクターで配列を初期化することはできます。


program arraycons
  implicit none
  integer :: i
  real :: a(10) = (/(i, i=2,20, 2)/)
  print *, a
end program arraycons

于 2011-01-14T14:49:52.953 に答える
5

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
于 2019-07-26T01:01:43.657 に答える