2016-04-19 19 views
1

我有一个矩阵A声明为real :: A(7,8)并初始化,以便所有条目都是0.0Fortran中的“A(:: 2,3)= -1.0”是做什么的?

以下命令不提供任何编译错误。

A(::2,3) = -1.0 

我认识到,受影响的列将只有3列 什么行? ::2是否意味着行12?或者是其他东西?

我打印出矩阵,但无法理解产生的图案。

这里(的完整性):

do, i=1,7 
    write(*, "(f5.2)") (A(i,j), j=1,8) 
enddo 

0.00 i = 1 
0.00 
-1.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 2 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 3 
0.00 
-1.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 4 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 5 
0.00 
-1.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 6 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 
0.00 ---- 
0.00 i = 7 
0.00 
-1.00 
0.00 
0.00 
0.00 
0.00 
0.00 

现在看它,它看起来像它开始于i=1,并增加了2〜i,直到它到达矩阵的边界。它是否正确? ?

这是否意味着::2相当于1:7:2(“从1到7的2步)

+0

使用标签[标签:fortran]更好的可见性。 Fortran 90只是一个特定的(和旧的)版本。 –

回答

1

documentation来看,我们可以看到:

print array-expression [first-expression : last-expression : stride-expression] 

其中:

array-expression应该评估为阵列类型的表达式

first-expression第一个元素在一个范围内,第一个元素是 已打印。默认为下限。

last-expression范围内的最后一个元素,但如果步幅不等于1,可能不是最后一个要打印的元素 。默认为上限 范围。

stride-expression步幅的长度。默认为1.

因此,如果first-expressionlast-expression被省略,它们分别默认为下限和上限。

0

是的,这是正确的 - 这是相同的1:7:2,你可以从输出中看到的,它的设置子阵列中的第三个元素为-1的每2子阵列