加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

fortran处理矩阵(转载)

(2014-01-15 10:06:57)
分类: 科研知识

转载 http://zhangzhaoru.blog.sohu.com/91442482.html

    1. 读取矩阵:假设要读取的矩阵a为[m,n]维, 由于fortran是按列读取,所以在定义变量时要把矩阵设为[n,m]维,读取后再转置。具体指令很简单:

     integer,dimension(n,m) :: a

     integer,dimension(m,n) :: b 

     read(1,*) a[n,m]

     b=transpose(a);

例:

    要读取矩阵为[1 2 3; 4 5 6],得按上述程序读取后得到的结果为a=[1 4; 2 5; 3 6], b=[1 2 3; 4 5 6];但其实这是matlab的显示方法,而fortran则不同。matlab是按照

                   第一行 a(1,1), a(1,2)

                   第二行 a(2,1),a(2,2)

                   第三行 a(3,1), a(3,2)

的顺序来显示,而fortran则是按照 a(1,1),a(2,1),a(1,2),a(2,2),a(3,1), a(3,2)的顺序来显示。具体为:

                matlab:     1                   b =  3

                                                       6

                                  

 而在使用print命令后,fortran则显示为

                           a =   1 2 3 4 5 6

                           b =  2 5 3 6

也就是说,如果把fortran按matlab那样的顺序来写的话,print之后则是按列来显示。(如果是按列来写的话,则print之后是按行来显示)

    2. reshape

       matlab里的reshape命令是按列来读取的,如果将fortran矩阵元素写成matlab的形式,也可以说是按列读取。但我对于reshape的规律,目前尚未琢磨透彻,总觉得每次直接对原始矩阵reshape得到的结果超出自己的想象,只好先reshape成一维数组,继而reshape成自己想要的维数。在这方面希望能有高人指点一下。 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有