用 Fortran 中的序列初始化数组
Initilalising an array with a sequence in Fortran
我目前正在翻译一些遗留的 Fortran 代码,但我很难理解代码中的特定行。编译器似乎也发现这一行很奇怪并抛出错误。据我了解,它试图通过以 1 为增量对 1 到 9 进行排序来初始化数组,并用列主要形式的此序列填充数组矩阵。
program arrayProg
integer :: matrix(3,3), i , j !two dimensional real array
matrix = reshape((/1:9:1/), (/3,3/))
end program arrayProg
这种语法在 fortran 中可以接受吗? (一定是因为它来自遗留代码)
我是不是误解了这条线的作用?
语法不正确,此类代码不能由 Fortran 编译器编译,除非它实现了一些非标准扩展。
英特尔 Fortran 接受此:
A colon-separated triplet (instead of an implied-DO loop) to specify a range of values and a stride; for example, the following two array constructors are equivalent:
1 INTEGER D(3)
2 D = (/1:5:2/) ! Triplet form - also [1:5:2]
3 D = (/(I, I=1, 5, 2)/) ! implied-DO loop form
来自 Development Reference Guides:Array Constructors
(注意:英特尔文档中的 link 经常更改,如果 link 已失效,请在评论中通知我并尝试搜索“triplet form”和“array constructors” )
要以标准方式生成序列,可以使用隐含的 do 循环,例如
(/ (i, i=1,9) /)
reshape 然后只是将 1D 数组更改为 2D 数组,如您猜测的那样按列主顺序排列。
我目前正在翻译一些遗留的 Fortran 代码,但我很难理解代码中的特定行。编译器似乎也发现这一行很奇怪并抛出错误。据我了解,它试图通过以 1 为增量对 1 到 9 进行排序来初始化数组,并用列主要形式的此序列填充数组矩阵。
program arrayProg
integer :: matrix(3,3), i , j !two dimensional real array
matrix = reshape((/1:9:1/), (/3,3/))
end program arrayProg
这种语法在 fortran 中可以接受吗? (一定是因为它来自遗留代码) 我是不是误解了这条线的作用?
语法不正确,此类代码不能由 Fortran 编译器编译,除非它实现了一些非标准扩展。
英特尔 Fortran 接受此:
A colon-separated triplet (instead of an implied-DO loop) to specify a range of values and a stride; for example, the following two array constructors are equivalent:
1 INTEGER D(3)
2 D = (/1:5:2/) ! Triplet form - also [1:5:2]
3 D = (/(I, I=1, 5, 2)/) ! implied-DO loop form
来自 Development Reference Guides:Array Constructors
(注意:英特尔文档中的 link 经常更改,如果 link 已失效,请在评论中通知我并尝试搜索“triplet form”和“array constructors” )
要以标准方式生成序列,可以使用隐含的 do 循环,例如
(/ (i, i=1,9) /)
reshape 然后只是将 1D 数组更改为 2D 数组,如您猜测的那样按列主顺序排列。