Link Search Menu Expand Document

以Voronoi圖進行環保署測站數據之空間外插

Table of contents

背景

  • 有關Voronoi圖的原理、製作方式以及結果詳見空品測站之Voronoi圖
  • 在該次作業中,已將全台公版模式範圍之1x1網格點所應對應到的測站,進行了Voronoi圖的分配。
  • 此處延續鄉鎮區平均值計算(以接鄰為考量)內外積之矩陣計算方式,擴大到1x1網格系統,以連接到Voronoi圖的成果。
  • 目標:
    1. 填補沒有值的行政區域。
    2. 測試在大型矩陣中、矩陣內外積的效率。

程式差異

執行結果比較

計算各網格點的濃度

  • 此一階段將日均值計算結果(var、維度依序為:[測項、日期、測站]),與Voronoi圖的測站分配結果(fac1,維度依序為:[測站、網格]),以內積方式進行相乘
  • fac1之準備詳下,var之矩陣作法同stn_dot
llv=pd.read_csv('/nas2/cmaqruns/2022fcst/fusion/Voronoi/gridLLvor.csv')
nxy=393*276
if len(llv)!=nxy:sys.exit('wrong grid matching')
all_stn=set(list(llv.AQID))
ns=len(all_stn)
seq=list(all_stn)
seq.sort()
seqn={seq[i]:i for i in range(ns)}
fac1=np.zeros(shape=(ns,nxy))
for t in range(nxy):
  i=llv.AQID[t]
  fac1[seqn[i],t]=1.
...
res1=np.ma.dot(var,fac1)

鄉鎮區範圍內網格濃度之平均

  • 前階段結果(res1、維度為[測項、日期、網格]),與鄉鎮區在各網格點內之分配(fac2),維度為[網格、鄉鎮區],進行內積計算。
  • 過去這項作業是使用pandas.pivot_table來計算,此處因測項與時間等維度都較複雜,pandas雖然也有平行運算功能,但仍然較比np.ma.dot慢了許多。
sw=set(llv.TOWNCODE)
nw=len(sw)
seq=list(sw)
seq.sort()
seqn={seq[i]:i for i in range(nw)}
fac2=np.zeros(shape=(nxy,nw))
for t in range(nw):
  a=llv.loc[llv.TOWNCODE==seq[t]]
  n=len(a)
  for i in a.index:
    fac2[i,t]=1./n

res=np.ma.dot(res1,fac2)
  • 經測試,程式可以使用到master的12核心(total 20)、devp的64核心(total 100)進行平行計算。

處理結果比較

  • hue color scale
stn_dot結果stn_dotV結果
stn_dot結果stn_dotV結果LGHAP2009結果

程式下載