如何在fortran中调用40个值中的每4个值
我有一个列矩阵,有40个值。说如何在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
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:很好,不是吗?这就是三十多年和四次标准修订对一门语言所能做的。:)