Код: Выделить всё
import numpy as np
x_size = 2000
y_size = 2500
z_size = 400
rng = np.random.default_rng(123)
z_coordinates = np.linspace(0, z_size, y_size) + rng.laplace(0, 1, (x_size, y_size))
Самый простой подход — создать пустой массив целевой формы и выполнить итерацию по каждому значению z:
Код: Выделить всё
y_coordinates = np.empty((x_size, z_size), dtype=np.uint16)
for i in range(z_size):
y_coordinates[:, i] = np.argmin(
np.abs(z_coordinates - i),
axis=1,
)
Конечно, использование более векторизованного подхода было бы быстрее, например как:
Код: Выделить всё
y_coordinates = np.argmin(
np.abs(
z_coordinates[..., np.newaxis] - np.arange(z_size)
),
axis=1,
)
Также обертывание блоков кода в функции и украшение их @jit(nopython=True) numba не помогает.
Как я могу ускорить работу расчет?
Подробнее здесь: https://stackoverflow.com/questions/792 ... st-indices
Мобильная версия