如何在fortran中调用40个值中的每4个值

如何在fortran中调用40个值中的每4个值,fortran,Fortran,我有一个列矩阵,有40个值。说 1 4 5 2 4 1 9 . . . 2 我怎样才能调用每四个值并将它们平均到第40个?我试着用下面的方法来做,但是有更好的方法吗?贝斯特 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) 怎么样 program testing implicit none

我有一个列矩阵,有40个值。说

1
4
5
2
4
1
9
.
.
.
2
我怎样才能调用每四个值并将它们平均到第40个?我试着用下面的方法来做,但是有更好的方法吗?贝斯特

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)
怎么样

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
这是输出:

2.500000       6.500000       10.50000       14.50000       18.50000    
22.50000       26.50000       30.50000       34.50000       38.50000

这就是您要找的吗?

我花了几次迭代才找到正确的语法,但是这个怎么样

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 整数,参数,维度(*)::a=[1,4,5,…,2] 整数::i 真实尺寸(10):平均值 平均值=[(和(a(i*4+1:(i+1)*4))/4,i=0,9] 打印*,平均值 结束
我不明白你在这里想干什么。i=1,4本身甚至不是一个有效的语句。你的平均值是多少?什么数组是“平均值”?1。好吧,我把它缩短成这样,而不是把do-enddo放在一起。2.“avg”是连续四个数字的平均值。avg1=前四个值,avg2第二个值等等。谢谢你,加拿维亚人,但我想我没有解释我的问题(@SM:我认为卡纳瓦宁的回答也是正确的(只是比我的回答长)。我没有深入研究代码,但最终的结果是正确的;他只是使用了不同的输入数组。@eriktous您的方法和我的方法产生相同的结果,两者似乎都是正确的,但您的方法要优雅得多。但请不要“他”我,并不是所有人都是男性。我道歉。我已尽力正确键入您的用户名,然后我犯了这样一个无知的错误。我不知道我在这里遗漏了什么。但我不知道两个程序是如何产生相同的结果的。前四个平均值是1,4,5,2不是2.5。我想卡纳使用了1-40作为输入,而埃里克使用了我给出的输入。谢谢你纠正我的错误。展示了我的古老性:…那是Fortran?哇!自从Fortran-77(更不用说Fortran IV或Fortran 66)以来,它已经发生了变化!@Jonathan:很好,不是吗?这就是三十多年和四次标准修订对一门语言所能做的。:)