Arrays Fortran 90数组子集
我试图阅读一些Fortran代码,但对于像这样的数组子集操作,有一些东西我无法理解 假设Arrays Fortran 90数组子集,arrays,fortran,Arrays,Fortran,我试图阅读一些Fortran代码,但对于像这样的数组子集操作,有一些东西我无法理解 假设n=3 还有阵列 INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12) REAL(KIND=dp) :: P(n+1),P0(n) 这条线到底是干什么的 DO i=1,n-1 ….. P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1) …. END DO 它是嵌套循环吗?如P的j从3到i+2,以及P的k从1到i 提前
n=3
还有阵列
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12)
REAL(KIND=dp) :: P(n+1),P0(n)
这条线到底是干什么的
DO i=1,n-1
…..
P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1)
….
END DO
它是嵌套循环吗?如P
的j
从3
到i+2
,以及P
的k
从1
到i
提前谢谢。接电话
P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1)
并将i
替换为1
(它在do
循环中获取的第一个值)
在lhs上,从元素3到元素3有一个数组p
切片(或部分),因此在本例中只有一个元素,但仍然是一个数组切片而不是标量。通过将1
乘以数组P0
的(相同大小)切片,然后除以2来更新
在下一次迭代中更有趣,i==2和
P(3:4) = P(3:4) - 2*P0(1:2) / 3
其中,数组切片现在每个为2个元素。数组切片上的操作应用于每个数组中相应的元素,因此此语句与这两个语句大致等效
P(3) = P(3) - 2*P0(1) / 3
P(4) = P(4) - 2*P0(2) / 3
最好用Fortran术语将其视为数组部分上的操作,而不是嵌套循环的某种语法糖
P(3:i+2) = P(3:i+2) - i*P0(1:i) / (i+1)
并将i
替换为1
(它在do
循环中获取的第一个值)
在lhs上,从元素3到元素3有一个数组p
切片(或部分),因此在本例中只有一个元素,但仍然是一个数组切片而不是标量。通过将1
乘以数组P0
的(相同大小)切片,然后除以2来更新
在下一次迭代中更有趣,i==2和
P(3:4) = P(3:4) - 2*P0(1:2) / 3
其中,数组切片现在每个为2个元素。数组切片上的操作应用于每个数组中相应的元素,因此此语句与这两个语句大致等效
P(3) = P(3) - 2*P0(1) / 3
P(4) = P(4) - 2*P0(2) / 3
最好用Fortran术语将其视为数组部分上的操作,而不是嵌套循环的某种语法糖