看板 Fortran 關於我們 聯絡資訊
program test integer,parameter :: i=11,j=13,ij_avg=9 real*8 :: s1(i,j),s11(i-ij_avg+1,j-ij_avg+1) do mm=1,i do nn=1,j s1(mm,nn)=(mm+nn/2.d0)*sqrt(mm*1.d0) enddo enddo s11=0.d0 k1=ij_avg-1 print*,s1 print*,'-------------' s11=reshape((/ ((/ (sum(s1(ii:(ii+k1),jj:(jj+k1))),jj=1,j-k1) /),ii=1,i-k1) /),(/i-ij_avg+1,j-ij_avg+1/)) print*,s11 end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.82.216 ※ 編輯: onezillion 來自: 140.109.82.216 (05/15 12:43)
zmack0905:糟糕..發現我沒學過SUM 跟 //的用法囧 05/15 13:10
zmack0905:應該是沒有化為一維,原本的目的是將環境資料的解析度降 05/15 13:10
zmack0905:低,由1*1降至3*3或9*9,所以需要9格並為一格,故數會減少 05/15 13:11
onezillion:那你的formula應該是sum(s1(i+(-1:1),j+(-1:1))) 05/15 13:13
onezillion:還是我會錯意了 05/15 13:14
onezillion:突然發現,最裡面的array/matrix直接指定範圍就好了 05/15 13:17
onezillion:所以可以拆掉一層loop 05/15 13:18
zmack0905:我原本的寫法是同列先三行一併,在同行三列一併來寫的. 05/15 13:38
onezillion:那可以試試直接給3x3的範圍再sum 05/15 13:58
zmack0905:可以請教一下 / /的用法嗎囧? 05/15 17:01
onezillion:google: implied do fortran 05/15 17:51
onezillion:沒甚麼特別的,就是把一串值包成array,data也有用到 05/15 17:53
onezillion:還有,77不確定,但是90以後支援向量運算,所以完全不用do 05/15 17:55
onezillion:也可以加完s1 05/15 17:57
※ 編輯: onezillion 來自: 140.109.82.216 (05/15 18:33)