作者onezillion (宝贝)
看板Fortran
标题Re: [问题] 连续变数名称跟加法的设定
时间Wed May 15 12:42:56 2013
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)
1F:推 zmack0905:糟糕..发现我没学过SUM 跟 //的用法囧 05/15 13:10
2F:→ zmack0905:应该是没有化为一维,原本的目的是将环境资料的解析度降 05/15 13:10
3F:→ zmack0905:低,由1*1降至3*3或9*9,所以需要9格并为一格,故数会减少 05/15 13:11
4F:→ onezillion:那你的formula应该是sum(s1(i+(-1:1),j+(-1:1))) 05/15 13:13
5F:→ onezillion:还是我会错意了 05/15 13:14
6F:→ onezillion:突然发现,最里面的array/matrix直接指定范围就好了 05/15 13:17
7F:→ onezillion:所以可以拆掉一层loop 05/15 13:18
8F:→ zmack0905:我原本的写法是同列先三行一并,在同行三列一并来写的. 05/15 13:38
9F:→ onezillion:那可以试试直接给3x3的范围再sum 05/15 13:58
10F:推 zmack0905:可以请教一下 / /的用法吗囧? 05/15 17:01
11F:→ onezillion:google: implied do fortran 05/15 17:51
12F:→ onezillion:没甚麽特别的,就是把一串值包成array,data也有用到 05/15 17:53
13F:→ onezillion:还有,77不确定,但是90以後支援向量运算,所以完全不用do 05/15 17:55
14F:→ onezillion:也可以加完s1 05/15 17:57
※ 编辑: onezillion 来自: 140.109.82.216 (05/15 18:33)