如何用隐含的do循环做同样的事情? 我想用两个隐含的do循环替换现有的Vcvo和Vcvonew循环?
这是我的代码:
Program DO_LOOPS
Implicit none
Integer::i,j
Integer,parameter::BrCv=15,BrSat=24
Real,dimension(0:BrCv-1,BrSat)::Vcvo
Real,dimension(BrCv-1,BrSat)::Vcvonew
Do i=0,BrCv-1
do j=1,BrSat
Vcvo(i,j)=i+j*BrCv/BrSat
end do
End do
Do i=1,BrCv-1
do j=1,BrSat
Vcvonew(i,j)=Vcvo(i,j)
end do
End do
Stop
End program DO_LOOPS
答案 0 :(得分:2)
隐含的do循环将是:
Vcvo = reshape([((i + j*real(BrCv)/real(Brsat), i=0,BrCv-1), j=1,Brsat)],[BrCv,BrSat])
第一个。
对于第二个,你不需要隐含的循环。如已建议的那样,简单的数组赋值将执行:
Vcvonew = vcvo(1:,:)
第一个看起来并不比显式循环更清晰。但如果您想要更紧凑的解决方案,可以使用do concurrent
:
do concurrent (i = 0:BrCv-1, j=1:Brsat)
Vcvo(i,j) = i + j*real(BrCv)/real(Brsat)
end do
你有几行。
在分割之前,我也冒昧地将BrCv和BrSat转化为真实。它可能不是你想要的,但它是你注意的东西。