开发者

How to call each 4 values out of 40 values in fortran

I have a column ma开发者_开发技巧trix with 40 values. Say,

1
4
5
2
4
1
9
.
.
.
2

How can I call every four values and average them until it reaches 40th? I managed to do in the following way but is there a better way? Beste!

i = 1, 4
avg1 = avg + avg(i)

i = 5,8 
avg2 = avg + avg(i)

i = 9,12 
avg3 = avg + avg(i)

.......

i = 37,40 
avg10 = avg + avg(i)


It took me a couple of iterations to get the syntax right, but how about this?

integer, parameter, dimension(*) :: a = [ 1, 4, 5, ..., 2 ]
integer                          :: i
real, dimension(10)              :: avg

avg = [ (sum(a(i * 4 + 1 : (i + 1) * 4)) / 4., i = 0, 9) ]
print *, avg
end


How about that?

program testing

   implicit none

   integer, dimension(40) :: array
   real, dimension(10)    :: averages
   integer                :: i, j, k, aux

   array(:)    = (/(i, i=1,40)/)  ! just values 1 to 40
   averages(:) = 0.0

   k = 1  ! to keep track of where to store the next average

   do i=1,40,4 ! iterate over the entire array in steps of 4
      aux = 0  ! just a little helper variable, not really required, but neater I think

      do j=i,i+3 ! iterating over 4 consecutive values
         aux = aux + array(j)
      end do

      averages(k) = aux / 4.0
      k = k + 1
   end do

   print *, averages

end program testing

This is the output:

2.500000       6.500000       10.50000       14.50000       18.50000    
22.50000       26.50000       30.50000       34.50000       38.50000

Is this what you were looking for?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜