У меня есть 4d-xarray с размерами I[t, z, y, x]
и 3d-xarray с размерами Z[t, y, x]
.Z
- это индексы, которые мне нужны для измерения z в I
.Теперь я хочу получить значения I[t, Z[t,y,x], y, x]
и записать их в новый xarray размером O[t, y, x]
.
В принципе, я решил проблему с помощью for-циклов, но это слишком медленно (многои большие массивы).Есть ли способ сделать это без for-loop?
Пример кода делает то, что я хочу, но медленно:
def get_field_at_levels(array, levels):
shape = array.shape
array_out = np.zeros_like(levels)
for t in range(shape[0]):
for x in range(shape[2]):
for y in range(shape[3]):
if np.isnan(levels[t, x, y]):
array_out[t, x, y]==float('nan')
else:
array_out[t, x, y] = array[t, int(levels[t, x, y]), x, y]
return array_out