2017-08-10 2 views
1

私はWRFモデルの研究に使用しているPythonスクリプトを作成していましたが、補間ルーチンにはいくつかの問題があります。私の場合、私は特定のフィールドをプロットしようとしていますが、ボード全体に徹底的な圧力レベルを使用して、特に低いレベル(1000,850)の場合は、山岳地帯を扱うときに極端な最大値または彼らは地面の下にあります。Pythonの2D配列に対する3D WRFデータの補間

だから、私の考えでは(簡単に、以下で行う)地盤の圧力レベルを検出するスクリプトを書くことだった:

接地圧を含む2次元アレイ表面になり
pb = ncFile.variables['PB'][0][0] 
p = ncFile.variables['P'][0][0] 
sfcPres = pb + p 

、その後、設定されたデータを補間するために、高さパラメータとして補間関数にsfcPres、medLevel、およびトップレベル:私は3つの配列を与えたかった。ここから

medLevel = sfcPres - 50 
topLevel = sfcPres - 100 

:それぞれこれらより上の圧力50hPaと100hPaを含む他の二つの分野を確立各o 3つのアレイのそれぞれの緯度、経度の対に緯度、経度の対を割り当てる。

私が問題としているのは、私がこれまで使ってきた補間ルーチンはすべて、圧力レベルの特異値に補間することしかできないということです。

this functionの順番で何かできるようにしたいのですが、所望の引数がその2D配列をとり、各点で3Dデータセット([Z、lat、lon]の配列)を補間することができますその2D配列内にある。

誰も簡単な方法を知っているので、データセットがかなり大きいのでループを使用する必要はありません。約60個のファイルに対して8つの結合セットを使用して関数の平均値を計算する必要があります。

ありがとうございます!

答えて

0

これを行う簡単な方法はなく、ループを使用する必要があります。私は、自分が指定した一定の高さのサーフェスに4Dの可変フィールドを線形補間する私自身のWRFルーチンを持っています。私はあなたが圧力面のこの機能を変更することができるはずだと信じています。私は自分自身でWRFデータの問題に取り組んできました。

def linear_height(var,surface): #defaults to .5km to 20.5km with .5 km intervals 
''' 
Requirements: 
import numpy as np 

This function will take in a variable and the corrosponding height surface of the model to 
then interpolate to constant height surfaces from 500m to 20km at 500m intervals. 
The interpolation to the new height surfaces is linear and occurs from the lowest level x,y point 
to the top level x,y point. 

The output variable will have the same units as the input variable but will have a different shape 
Assuming that height is the second column of the array, this will be the only length to change 
example: linear_height(Temperature, Height_surfaces) 

''' 
###################################### 
#Edit to change the levels of the interpolated height coordinates 
new_height = np.arange(500,20500,500) # 1km to 20 km 
###################################### 
new_surf = np.empty((var.shape[0],new_height.shape[0],var.shape[2],var.shape[3])) 

for TIM in np.arange(var.shape[0]): 
    for IDX, VAL in np.ndenumerate(var[0][0]): 
     new_val = np.interp(new_height,surface[TIM,:,IDX[0],IDX[1]],var[TIM,:,IDX[0],IDX[1]],left=np.nan, right=np.nan) 
     new_surf[TIM,:,IDX[0],IDX[1]]=new_val[:] 
return new_surf 
+0

私はそれが残念です。私はCONUMの大半を4km四方でアンサンブルシミュレーションして、この方法で補間が必要な5つの変数を使用する不安定性パラメータのアンサンブル手段を生成する必要があると考えています。 1つのWRFOUTファイルにある私のテストスクリプトは、24時間後もまだ実行されていたので、残念ながら私はこの特定のプロットのために不運に思えます。 ありがとうございました! – Phantom139

関連する問題