您的Fortran实现有两个主要缺点:您可以混合IO和计算(并按条目从文件条目读取)。
您不使用向量/矩阵操作。
此实现确实执行与您的实现相同的操作,并且在我的机器上比您的执行速度快20倍:program test
integer gridsize,unit
real mini,maxi,mean
real, allocatable :: tmp (:,:,:)
gridsize=512
unit=40
allocate( tmp(gridsize, gridsize, gridsize))
open(unit=unit,file='T.out',status='old',access='stream',&
form='unformatted',action='read')
read(unit=unit) tmp
close(unit=unit)
mini = minval(tmp)
maxi = maxval(tmp)
mean = sum(tmp)/gridsize**3
print *, mini, maxi, mean
end program
这样做的目的是将整个文件读入一个数组中。tmp一步一步。然后,我可以使用这些函数MAXVAL,MINVAL,和SUM直接在数组上。
对于精度问题:只需使用双精度值,并执行动态转换,如mean = sum(real(tmp, kind=kind(1.d0)))/real(gridsize**3, kind=kind(1.d0))
只略微增加计算时间。我试着按元素的顺