[請益] FORTRAN do loop 在某問題上的寫法

看板Fortran作者 (...)時間12年前 (2012/05/07 02:30), 編輯推噓4(403)
留言7則, 3人參與, 最新討論串1/2 (看更多)
大家好,我想請教一個對我來說蠻困難的問題 我要讀一個檔案,檔名testyyy.dat,檔案內容是3行10列的數值。 檔案內容如下: 1 11 -0.1 2 12 -0.2 3 13 -0.3 4 14 -0.4 5 15 -0.5 6 16 -0.4 7 17 -0.3 8 18 -0.2 9 19 -0.1 10 20 -0.1 以下程式可以把檔案讀出並列在螢幕上: Dimension POINT(3, N) ! 設定矩陣維度,3行N列,N=10。 10 FORMAT(1X, 3(3F10.5)) ! 輸出的檔案格式 Raw data。 C 讀檔案,把檔案中的數值填入建立POINT(3,N)的矩陣中。 OPEN(323, FILE='testyyy.dat') ! 把要讀入的檔案檔名+路徑設定好。 READ(323,*) POINT ! 讀入。 Do i = 1,N ! 從第一個數據開始讀到最後一個。 WRITE(*,10) POINT(1,i), POINT(2,i), POINT(3,i) enddo ! 讀檔案結束。 接著,我要把內容分成兩個部分並輸出。 1 11 -0.1 2 12 -0.2 3 13 -0.3 4 14 -0.4 5 15 -0.5 輸出檔案a.dat 6 16 -0.4 7 17 -0.3 8 18 -0.2 9 19 -0.1 10 20 -0.1 輸出檔案b.dat Do k = 1,5 ! 第一組1~5列 WRITE(*,10) POINT(1,k), POINT(2,k), POINT(3,k) enddo WRITE(*,*) Do j = 6,10 ! 第二組6~10列 WRITE(*,10) POINT(1,j), POINT(2,j), POINT(3,j) enddo 真正的問題是我的數據是3行1000000列, 依序由上到下分成1000組,每一組挑出一個極小值(這簡單可以自己做)。 如果依照上面的寫法是不行的,想了好幾天只好來這裡求助高手給我點提示。 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.20.237

05/07 11:02, , 1F
大概矩陣過大 記憶體或者編譯器不支援
05/07 11:02, 1F

05/07 11:40, , 2F
你的問題是不知道怎麼樣把1M個資料分成1000個loop寫出來嗎
05/07 11:40, 2F

05/07 11:45, , 3F
另外這個矩陣其實不大,就算是real(8)也才24MB而已
05/07 11:45, 3F

05/07 13:38, , 4F
我用10列3行來練習,寫一組回圈分出兩組,結果怎麼寫都不對
05/07 13:38, 4F

05/07 13:40, , 5F
分別寫兩個loop j和k就OK,那分1000組豈不是寫1000次loop呢
05/07 13:40, 5F

05/07 13:48, , 6F
所以想請問大家是否有更好的寫法不必寫1000次loop分出1000組
05/07 13:48, 6F

05/07 17:24, , 7F
其實雙層loop就可以解決你的問題了,不用寫1k個loop出來
05/07 17:24, 7F
文章代碼(AID): #1FfiD767 (Fortran)
文章代碼(AID): #1FfiD767 (Fortran)