3次元配列内で1軸のデータを補間したい。指定された異なる値のx値はわずかに異なりますが、すべて同じx値にマップする必要があります。1つの配列軸の高速補間
与えられたx値が同一ではないので、現在、私は次のようにします。
import numpy as np
from scipy import interpolate
axes_have = np.ones((2, 72, 2001))
axes_have *= np.linspace(0, 100, 2001)[None,None,:]
axes_have += np.linspace(-0.3, 0.3, 144).reshape((2, 72))[:,:,None]
arr = np.sin(axes_have)
arr *= np.random.random((2, 72))[:,:,None]
axis_want = np.linspace(0, 100, 201)
arr_ip = np.zeros((2, 72, 201))
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
ip_func = interpolate.PchipInterpolator(axes_have[i,j,:], arr[i,j,:], extrapolate=True)
arr_ip[i,j,:] = ip_func(axis_want)
を2つの入れ子for
-loopsを使用すると、当然非常に遅いです。
速度を向上させる方法はありますか?たぶんNumPy配列のマジックや並列化を行うことによって。
「arr」のサンプルを追加できますか? – DJK
私の例でエラーがありましたが、これは今修正されました。 'arr'が与えられるはずです。 – leviathan