NC檔案之8小時移動平均
Table of contents
背景與注意事項
- 此處以np.cumsum進行移動平均值之計算。
- 結果檔之模版:由輸入檔複製一份
- 命名方式:字尾+8
- 除了臭氧之外,其餘空品項目並無8小時值之規範,因此為減少計算浪費,需先以ncks將臭氧抽出,單獨計算即可。
NC8程式內容
# /opt/miniconda3/envs/py37/bin/python
import numpy as np
import netCDF4
import os,sys,subprocess
if not sys.warnoptions:
import warnings
warnings.simplefilter("ignore")
fname=[sys.argv[1],sys.argv[1]+'8']
os.system('cp '+fname[0]+' '+fname[1])
rw=['r','r+']
nc0=netCDF4.Dataset(fname[0],rw[0])
nc1=netCDF4.Dataset(fname[1],rw[1])
v4=list(filter(lambda x:nc1.variables[x].ndim==4, [i for i in nc1.variables]))
nt,nlay,nrow,ncol=nc1.variables[v4[0]].shape
a=np.zeros(shape=(nt,len(v4),nlay,nrow,ncol))
for v in v4:
iv=v4.index(v)
a[:,iv,:,:,:]=nc0.variables[v][:,:,:,:]
ret = np.cumsum(a,axis=0, dtype=float)
n=8
ret[n:] = ret[n:] - ret[:-n]
b=ret[n - 1:] / n
for v in v4:
iv=v4.index(v)
nc1.variables[v][3:nt-4,:,:,:]=b[:,iv,:,:,:]
nc1.close()