gpt4 book ai didi

arrays - 隐式 do 循环数组初始化

转载 作者:行者123 更新时间:2023-12-04 01:35:43 25 4
gpt4 key购买 nike

我想用隐式 do 循环在一行上初始化一个数组。但是,我总是收到语法或形状错误。谁能帮我纠正以下结构?

integer myarray :: (maxdim, nr)

myarray(1:maxdim,nr) = (/ (/i,i=1,maxdim/),nr /)

最佳答案

您正在使用 MAXDIM 初始化一个数组行和 NR列,看起来每一列都包含整数 1 到 MAXDIM .

作为第一步,继续写出实际的 DO -循环:

do j=1,NR
do i=1,MAXDIM
myarray(i,j) = i
end do
end do

将内部循环折叠为隐式循环结构:
do j = 1,NR
myarray(1:MAXDIM,j) = (/ (i, i=1,MAXDIM) /)
end do

但是,当我们尝试折叠外部循环时,会发生一些奇怪的事情:
myarray = (/ ((/ (i, i=1,MAXDIM) /), j=1,NR) /)

现在,我和你一样遇到了不兼容的等级错误。由于我也不太擅长隐式 do 循环,所以我查看了 shape数组构造函数的内在结果:
print *, shape(myarray)
print *, shape((/ ((/ (i, i=1,MAXDIM) /), j=1,NR) /))

这打印出来
   5      10
50

数组构造函数只是扩展一维数组,扁平化任何嵌套的数组结构。我们实际上可以丢弃第二组 (/ /)来简化。由于一切都已经按照正确的顺序排列,我们可以使用 reshape内在以确保适当的排名。我的完整测试程序是:
program sotest
implicit none

integer, parameter :: MAXDIM = 5
integer, parameter :: NR = 10

integer :: i
integer :: j
integer :: myarray(MAXDIM, NR)
integer :: myarray_implicit(MAXDIM, NR)

do j = 1,NR
do i = 1,MAXDIM
myarray(i,j) = i
end do
end do

myarray_implicit = reshape((/ ((i,i=1,MAXDIM), j=1,NR) /), (/ MAXDIM, NR /))

print *, all(myarray == myarray_implicit)
end program sotest

关于arrays - 隐式 do 循环数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070528/

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