너피 (Numpy) 배열 data
.... 데이터입니다. Numpy 어레이 z
에 거리가 있습니다. 데이터와 z는 같은 모양을 가지며 z의 각 점은 데이터의 해당 점을 측정 한 거리입니다. 문제를 복잡하게 만들려면 3, 4 또는 5 차원의 데이터/z 배열을 제공해야합니다.1D numpy/scipy 보간법이 1D가 아닙니다
1D numpy 배열 dists
에서 거리 집합으로 데이터를 보간하고 싶습니다. 데이터 구조로 인해, 보간 축은 항상 끝에서부터 두 축입니다. 즉, 배열이 3 차원 인 경우 보간 축은 0입니다. 배열에 4 차원이 있으면 보간 축은 1입니다. AFAICT 이후 모든 numpy/scipy 보간 루틴은 원래 거리가 1D 배열로 지정되기를 원하기 때문에 데이터와 z를 dist에 보간하는 것은 다소 복잡한 작업으로 보입니다 .
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