Re: [問題] fortran 一維矩陣
※ 引述《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時,往往需要先轉秩才能傳入.反之
亦然.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 168.150.122.1
※ 文章網址: http://www.ptt.cc/bbs/Fortran/M.1418933953.A.2EE.html
→
12/19 17:57, , 1F
12/19 17:57, 1F
→
12/19 17:58, , 2F
12/19 17:58, 2F
→
12/19 17:58, , 3F
12/19 17:58, 3F
→
12/19 17:59, , 4F
12/19 17:59, 4F
→
12/19 23:23, , 5F
12/19 23:23, 5F
→
12/19 23:24, , 6F
12/19 23:24, 6F
→
12/20 02:18, , 7F
12/20 02:18, 7F
→
12/20 02:19, , 8F
12/20 02:19, 8F
推
12/20 02:51, , 9F
12/20 02:51, 9F
→
12/20 02:52, , 10F
12/20 02:52, 10F
→
12/20 02:53, , 11F
12/20 02:53, 11F
→
12/20 02:53, , 12F
12/20 02:53, 12F
→
12/20 03:05, , 13F
12/20 03:05, 13F
→
12/20 03:05, , 14F
12/20 03:05, 14F
推
12/24 18:00, , 15F
12/24 18:00, 15F
→
12/24 18:00, , 16F
12/24 18:00, 16F
→
12/24 18:01, , 17F
12/24 18:01, 17F
→
12/24 18:02, , 18F
12/24 18:02, 18F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章