(я не знаю, как назвать этот вопрос. Поэтому не стесняйтесь редактировать)
У меня есть следующие массивы:
3D-массив, содержащий значение для [z, y, x]
3D-массив, содержащий высоту для [z, y, x]
2D-массив, содержащий Maximum_altitude для [y,x]
z, y, x имеют одинаковую длину для 3-х массивов.
Я хотел бы новый 2D-вывод, содержащий value_at_max_altitude для [y, x]
Алгоритм должен быть примерно таким:
find z where altitude[z, y, x] > max_altitude[y, x]
value_at_max_altitude[y, x] = value[z, y, x]
Как бы вы это сделали с numpy?
edit: Вот решение, которое у меня есть на самом деле.Но мне было интересно, можно ли использовать пустые внутренние функции, чтобы избежать цикла:
# get index of Z for first value != False
z = np.argmax(altitude >= max_altitude, axis=0)
# z shape is [x, y]
ny, nx = z.shape
# initialize empty array
value_at_max_altitude = np.empty([ny, nx])
# fill value_at_max_altitude
for y in range(ny):
for x in range(nx):
value_at_max_altitude[y, x] = value[z[y, x], y, x]