gpt4 book ai didi

arrays - 使用 Fortran 中的序列初始化数组

转载 作者:行者123 更新时间:2023-12-02 11:33:46 24 4
gpt4 key购买 nike

我目前正在翻译一些遗留的 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

(注:英特尔文档的链接经常变化,如果链接失效,请在评论中通知我并尝试搜索“三元组形式”和“数组构造函数”)

要以标准方式生成序列,需要使用隐式 do 循环,例如

 (/ (i, i=1,9) /)

正如您所猜测的, reshape 只是将一维数组更改为按列主要顺序的二维数组。

关于arrays - 使用 Fortran 中的序列初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46698017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com