1

この簡単なプログラムを考えてみましょう

program main
implicit none

integer :: array(2,3) = transpose(reshape((/1,2,3,4,5,6/),(/ size(array, 2), size(array, 1) /)))
integer i,j
do i=1,2
   write(*,*) array(i,:)
end do
end program main

intel fortran コンパイラ (バージョン 13.0.0) でコンパイルすると、次のエラーが発生します。

main.f90(4): エラー #6263: この組み込み関数は定数式では無効です。[転置]

整数 :: array(2,3) = transpose(reshape((/1,2,3,4,5,6/),(/ size(array, 2), size(array, 1) /)))

定数式(?)では転置が使えないようです。定義時に配列を初期化する方法はありますか? 私の問題では、配列が非常に大きいため、手動で転置することはできません。

4

2 に答える 2

3

初期化式 (F2008 用語では定数式) での TRANSPOSE の使用は、Fortran 2003 の機能であり、そのコンパイラではまだサポートされていません。

適切な ORDER 引数を指定した RESHAPE の使用は、Fortran 95 の一部であり、そのコンパイラでサポートされており、必要なものと同等のものを提供できます。

integer :: array(2,3) = reshape([1,2,3,4,5,6], shape(array), ORDER=[2,1])
于 2013-10-12T23:48:57.370 に答える