numpy array data
has .... data。 Numpy數組z
有距離。數據和z具有相同的形狀,z的每個點是測量相應數據點的距離。使問題複雜化的是,用戶將提供具有3,4或5維度的數據/ z陣列。1D numpy/scipy插值不完全是1D
我想插入數據到一維numpy數組dists
中的一組距離。由於數據結構的原因,插值軸始終是兩個軸,即如果數組有三維,則插值軸爲0;如果數組有4維,則插值軸爲1等。由於AFAICT,所有numpy/scipy插值例程都希望在1D數組中給出原始距離,插值數據和z在dists上看起來有點複雜。這是我有:
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)
我認爲這會工作,但添加和刪除額外的「包裹」虛擬維度是極其不雅併爲代碼,是不是在所有緊湊。任何更好的想法?謝謝。
你可以添加一些示例輸入數據到你的文章?如果您願意,您可以生成與輸入相同形狀的隨機數據。 – YXD