load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
file_obs="isop_obs7.csv"
file_sim="oldisopsim.csv" ;"isop_sim7.csv"
lines_obs=asciiread(file_obs,-1,"string")
lines_sim=asciiread(file_sim,-1,"string")
delim="," ;分隔符
AVG0=new(10,float)
AVG=new(10,float)
R=new(10,float)
MAE=new(10,float)
RMSE=new(10,float)
IOA=new(10,float)
do i=1,10
time=tofloat(str_get_field(lines_obs,1,delim))
tmp1=str_get_field(lines_obs,i+1,delim)
tmp2=str_get_field(lines_sim,i+1,delim)
tmp1@_Fillvalue="-999"
do j=0,dimsizes(tmp2)-1
if (tmp1(j) .eq. "-999") then
tmp2(j)=""
tmp1(j)=""
end if
end do
var_sim=tofloat(tmp2) ;先提取字符串再转换成 float类型
var_obs=tofloat(tmp1)
iz=ind(.not.ismissing(var_obs))
if (.not.all(ismissing(iz))) then
AVG0(i-1)=avg(var_obs(iz))
AVG(i-1)=avg(var_sim(iz))
R(i-1)=escorc(var_sim(iz),var_obs(iz))
MAE(i-1)=avg(abs(var_sim(iz)-var_obs(iz)))
RMSE(i-1)=sqrt(avg((var_sim(iz)-var_obs(iz))^2))
IOA(i-1)=1-sum((var_sim(iz)-var_obs(iz))^2)/sum((abs(var_sim(iz)-AVG0(i-1))+abs(var_obs(iz)-AVG0(i-1)))^2)
end if
delete (iz)
end do
filename="统计.txt"
system("rm -rf "+ filename)
write_table(filename,"a",[/"AVGobs AVGsim R MAE RMSE IOA"/],"%s %s %s %s %s %s")
write_table(filename,"a",[/AVG0,AVG,R,MAE,RMSE,IOA/],"%8.2f %8.2f %8.2f %8.2f %8.2f %8.2f")
观测和旧模拟值计算
最新推荐文章于 2025-04-15 17:49:10 发布