矩阵线和列似乎在Fortran中反转打印

时间:2013-08-26 22:03:39

标签: arrays matrix fortran fortran95

我对Fortran 95中的2维数组(即矩阵)有一个简单的问题。据我所知,数学将矩阵内部的元素定义为Aij,其中i表示其行,j表示其列。好吧,如果我只编码write(*,*) Matrix,结果就会反转行和列!请参考以下示例代码:

program TEST
implicit none
integer :: P(3,3), i

P(1,1)=1
P(1,2)=2
P(1,3)=3
P(2,1)=4
P(2,2)=5
P(2,3)=6
P(3,1)=7
P(3,2)=8
P(3,3)=9

do i=1,3
  write(*,"(3(I1,1X))") P(i,1:3)
enddo

write(*,*)
write(*,"(3(I1,1X))") P

end program TEST

通过使用上面的循环(修复一行,然后在其中打印每一列),我得到了我期望的结果:

1 2 3
4 5 6
7 8 9

现在通过使用最后一个语句write(*,"(3(I1,1X))") P,我得到:

1 4 7
2 5 8
3 6 9

我在这里做错了吗?

1 个答案:

答案 0 :(得分:12)

当您将整个数组作为实体输出时,Fortran会在其内部存储器布局中输出数组。您看到的是Fortran是一种专栏语言。见http://en.wikipedia.org/wiki/Row-major_order#Column-major_order