很多数据中固定区域求平均,在新文件中输出
因对文件格式要求严格,在纵向每个数加上空格一共16个字符,计算后也要保持这样的格式,数据见附件。现在想把每4个数围成的矩阵求平均,得到一个数,然后在新文件里输出。比如说第一行第一列,第一行第二列,第二行第一列,第二行第二列这四个数求平均得到一个数; 第一行第三列,第一行第四列,第二行第三列,第二行第四列这四个数求平均得到一个数;一次类推。然后所有得到的平均数在另一个文件中输出,格式要保持不变。
试了很多次,得不到想要的结果,各位大神帮帮忙啊!!
Program www_fcode_cn
Implicit None
Integer , parameter :: DP = Selected_Real_Kind( p = 13 ) !// 需保留13位有效数字
Integer , parameter :: NC = 18 !// 列
Integer , parameter :: NR = 14 !// 行
Real(Kind = DP ) :: rData(NC,NR) , rDataLite(NC/2,NR/2)
integer :: i , j
Open( 12 , File = "1.dat" )
Open( 13 , File = "输出.dat" )
Do i = 1 , NR
Read( 12 , * ) rData( : , i )
End Do
Do i = 1 , size(rDataLite,dim=2)
Do j = 1 , size(rDataLite,dim=1)
rDataLite( j , i ) = sum( rData( 2*j-1:2*j , 2*i-1:2*i) ) / 4.0_DP
End Do
Write( 13 , '(100f16.8)' ) rDataLite( : , i )
End Do
Close( 13 )
Close( 12 )
End Program www_fcode_cn 文件传上了 楚香饭 发表于 2015-4-4 12:19
Program www_fcode_cn
Implicit None
Integer , parameter :: DP = Selecte ...
谢谢大神,我试了一下。是我没表达清楚。不知道怎么传图片,我在新回复里传了一张压缩后的,麻烦大神看一下,图里边每个格子代表一个数。18列14行的数据求平均以后应该是9列4行。谢谢! 图片,谢谢 楚香饭 发表于 2015-4-4 12:19
Program www_fcode_cn
Implicit None
Integer , parameter :: DP = Selecte ...
说错了,是9行7列:-P 18列14行,平均后应该为 9列7行,而不是9行7列。
我的代码正是这样
本帖最后由 上帝19岁 于 2015-4-4 18:55 编辑
楚香饭 发表于 2015-4-4 14:56
18列14行,平均后应该为 9列7行,而不是9行7列。
我的代码正是这样
是的,是我大意了。这个代码是不错的。数据较小量的时候没问题,数据多了就会出现格式问题,麻烦再帮忙看下。我用的notepad++打开的 ,求平均后得到的数据有些乱,格式对不上。
这个是320列120行转160列60行。
把 17 行的
Write( 13 , '(100f16.8)' ) rDataLite( : , i )
改成
Write( 13 , '(400f16.8)' ) rDataLite( : , i )
就行了。
如果再大,你就把 400 改得更大 fcode 发表于 2015-4-4 19:26
把 17 行的
Write( 13 , '(100f16.8)' ) rDataLite( : , i )
改成
谢谢 ,可以了!因文件很多,好几千个,需要批量处理这样的文件,麻烦能帮忙加一个批量操作的循环吗?
页:
[1]
2