※ 引述《kuang01 (我叫小刘)》之铭言:
: 想请问各位大大
: 在fortran 一维矩阵里
: do i=1,5
: A(i)=2
: enddo
: 这样会是 一colum vector 还是 row vector
: 因为我在matlab里
: 如果把 do 换成for
: 这样去写 会出现 row vector
: 想请问 fortran 的一维跟matlab是否不太一样
底下的人回答大致正确,因为对指标上来说,确实没差别,
但是你有这种问题,甚至刻意的去区别到底一个一维阵
列是row还是column vector也不是坏事.
因为在内存的使用上,fortran确实是by column,而C
based的语言,例如C/C++,Matlab,Scilab,Python都是
by row.也就是说,当你往内存里面填入一个二维阵
列时,fortran会让同一个column的资料作连续的排列.
因此当你在内存里面填值或读值的时候,在fortran应
该要先作column vector,而Matlab,C/C++,Python等应该要
先做row vector,在内存的使用上才是连续的读写,不会
一直跳跃.
这个影响还不只是读写效率的问题,那还只是其次的,作
不好顶多效率比较低,但是当你要让by column跟by row
的语言相互传值时,问题才出现.
例如你想在C-based的语言里面使用fortran写成的library,
例如lapack.因为你会把C里面的一块内存传到fortran中,
但因为C是将同一个row的资料在内存中作连续排列,跟
fortran对内存的使用方式刚好相反,所以当你把资料传入
时,fortran在理解这个阵列时,行列都会颠倒了.所以当你要
把C里面的值传到fortran时,往往需要先转秩才能传入.反之
亦然.