回 帖 发 新 帖 刷新版面

主题:求助:取平均值

哪位大侠能帮这个数据帮我平均一下啊,
4700    -0.31122100    26.54010010   430.17498779   569.35101318   569.35101318
4700    -0.37442699    23.21050072   422.27200317   569.35101318   569.35101318
4650    -0.15715100    19.74990082   423.68399048   569.35101318   569.35101318
4650     0.87752903    17.76580048   414.14700317   569.35101318   569.35101318
4600     0.81266898    17.35409927   305.35900879   499.44900513   539.21197510
4600     0.87766898    14.66569996   296.75399780   496.72601318   538.68798828
4550    -1.01847994    17.40889931   414.89001465   576.65002441   576.65002441
4550    -0.86241102    15.07740021   405.93099976   576.65002441   576.65002441
4500     3.07746005    25.38229942   584.13897705   584.13897705   584.13897705
4500    -5.00048018    13.01430035   584.13897705   584.13897705   584.13897705
4500    -2.10417008    12.71689987   584.13897705   584.13897705   584.13897705
相同点号的取平均 每个点重复的次数不等 有2 3 1次的 谁能帮实现一下啊,从第二列开始往后是1000列  我简化成5列是为了简单明了,谢谢!

回复列表 (共9个回复)

沙发

如果相同点号是连续的,那就简单,如果不连续其实也不难,只是费内存:)

板凳


就是这样的啊 连续 帮我考虑一下呗,谢谢

3 楼

两重循环,外重是判断到结尾为止,内重读到不一样的点号为止。
整一个数组为A(2,5000),另一个为点号数组JN(2),点个数N
读时读到JN(1),A(1,:)中,累加到A(2,:)中。
内重循环结束后将A(2,:)除以N并写到新文件中。

4 楼

一次性读取1000列不知道fortran能否实现?

5 楼


肯定能啦 我这1000列是用fortran写进去的 你说能否行啊?

6 楼

呵呵,不好意思,看错了,要定义的是A(2,1000)我看成5000了:)
读肯定能读,楼主先照着思路写写看,如果遇到问题可以再问哈:)

7 楼


Do k = 1 , NPoint

  do while(Point(k)=Point(k+1))
     ----
  enddo

EndDo


你好 还是写不出来  NPoint是总行数  Point(k)是点号 望指点

8 楼


你好 最近没在线吗

9 楼

real(8) a(2,1000)
open(11,file='dat.in')
open(22,file='dat.out')

read(11,iostat=nstat,*)pt,a(1,:)
do
  k=1
  if(nstat.ne.0)exit
  do
    read(11,iostat=nstat,*)pt1,a(2,:)
    if(nstat.ne.0.or.pt1.ne.pt)exit
    a(1,:)=a(1,:)+a(2,:)
    k=k+1
  end do
  a(1,:)=a(1,:)/k
  write(22,*)pt,a(1,:)
  a(1,:)=a(2,:)
end do

先凑合着看吧,没测试过,不保证没有BUG:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册