Numpy 配列data
には .... データがあります。Numpy 配列z
には距離があります。data と z は同じ形状で、z の各点は data の対応する点が測定された距離です。さらに複雑なことに、ユーザーは 3、4、または 5 次元の data/z 配列を提供します。
1D numpy array の一連の距離にデータを補間したいと考えていますdists
。データ構造のため、補間軸は常に最後から 2 軸です。つまり、配列が 3 次元の場合、補間軸は 0 です。配列が 4 次元の場合、補間軸は 1 などです。AFAICT では、すべての numpy/scipy 補間ルーチンは元の距離を 1D 配列で指定することを望んでいるため、データと z を距離に補間するのはやや複雑な作業のようです。 . これは私が持っているものです:
def dist_interp(data, z, dists):
# construct array to hold interpolation results
num_dims = len(data.shape)
interp_axis = num_dims-3
interp_shape = list(data.shape)
interp_shape[interp_axis] = dists.shape[0]
interp_res = np.zeros(shape=interp_shape)
# depending on usage, data could have between 3 and five dimensions.
# add dims to generalize. I hate doing it this way. Must be
# some other way.
for n in range(num_dims, 5) :
data = np.expand_dims(data, axis=0)
z = np.expand_dims(z, axis=0)
interp_res = np.expand_dims(interp_res, axis=0)
for m in range(data.shape[0]):
for l in range(data.shape[1]):
for j in range(data.shape[3]):
for i in range(data.shape[4]):
interp_res[m,l,:,j,i]=(
np.interp(dists,z[m,l,:,j,i],
data[m,l,:,j,i]))
# now remove extra "wrapping" dimensions
for n in range(0,5-num_dims):
interp_res = interp_res[0]
return(interp_res)
これでうまくいくと思いますが、余分な「ラッピング」ダミー ディメンションを追加したり削除したりするのは非常に洗練されておらず、コードがまったくコンパクトではありません。より良いアイデアはありますか?ありがとう。