温度データを4次元(緯度、経度、高度、時間)で線形補間する必要があります。
ポイントの数はかなり多く(360x720x50x8)、データ範囲内の空間と時間の任意のポイントで温度を計算する高速な方法が必要です。
使用してみscipy.interpolate.LinearNDInterpolator
ましたが、三角測量にQhullを使用すると、長方形のグリッドでは非効率になり、完了するまでに数時間かかります。
このSciPyチケットinterp1d
を読むことにより、ソリューションは、標準を使用してより多くのデータポイントを計算し、新しいデータセットで「最近傍」アプローチを使用する新しいnd補間器を実装しているように見えました。
ただし、これには再び長い時間がかかります(分)。
長方形のグリッド上のデータを、数分もかからずに4次元で補間する簡単な方法はありますか?
高密度のポイントを計算せずにinterp1d
4回使用することを考えましたが、ユーザーが座標を使用して呼び出すようにしましたが、これを行う方法について頭を悩ませることはできません。
そうでなければ、私のニーズに固有の独自の4D補間器を作成することは、ここでのオプションでしょうか?
これをテストするために私が使用しているコードは次のとおりです。
使用scipy.interpolate.LinearNDInterpolator
:
import numpy as np
from scipy.interpolate import LinearNDInterpolator
lats = np.arange(-90,90.5,0.5)
lons = np.arange(-180,180,0.5)
alts = np.arange(1,1000,21.717)
time = np.arange(8)
data = np.random.rand(len(lats)*len(lons)*len(alts)*len(time)).reshape((len(lats),len(lons),len(alts),len(time)))
coords = np.zeros((len(lats),len(lons),len(alts),len(time),4))
coords[...,0] = lats.reshape((len(lats),1,1,1))
coords[...,1] = lons.reshape((1,len(lons),1,1))
coords[...,2] = alts.reshape((1,1,len(alts),1))
coords[...,3] = time.reshape((1,1,1,len(time)))
coords = coords.reshape((data.size,4))
interpolatedData = LinearNDInterpolator(coords,data)
使用scipy.interpolate.interp1d
:
import numpy as np
from scipy.interpolate import LinearNDInterpolator
lats = np.arange(-90,90.5,0.5)
lons = np.arange(-180,180,0.5)
alts = np.arange(1,1000,21.717)
time = np.arange(8)
data = np.random.rand(len(lats)*len(lons)*len(alts)*len(time)).reshape((len(lats),len(lons),len(alts),len(time)))
interpolatedData = np.array([None, None, None, None])
interpolatedData[0] = interp1d(lats,data,axis=0)
interpolatedData[1] = interp1d(lons,data,axis=1)
interpolatedData[2] = interp1d(alts,data,axis=2)
interpolatedData[3] = interp1d(time,data,axis=3)
ご助力ありがとうございます!