Я хочу оптимизировать этот цикл, но у меня нет идей/навыков.
Я пытался переписать его с помощью numba, jax, но безуспешно.
Чтобы реализовать условия без перевычисления вещи (небольшой выигрыш), но это все равно около 30 секунд при запуске.
Я думаю, что векторизация - это способ, но я не могу найти способ правильно ее реализовать. Кто-нибудь может показать мне, как векторизовать это, зная, что выбранные входные данные будут иметь разную длину?
#A coord xyz dataframe
df = pd.DataFrame({"x" : np.random.uniform(100000.5,400000.5,69000),
"y" : np.random.uniform(100000.5,300000.5,69000),
"z" : np.random.uniform(-50.5,300.5, 69000),})
band_width, band_height, azi, max_distance, ang_tol = 100, 10, 60, 1000, 22.5
#float, float, float, int
x, y, z, idx = df['x'].values, df['y'].values, df[z_col].values, df.index.values
azi_rad = np.radians(azi)
cos_azi_rad, sin_azi_rad, tan_ang_tol_rad, ang_tol_rad = np.cos(azi_rad), np.sin(azi_rad), np.radians(ang_tol), np.tan(ang_tol_rad)
band_width, max_distance = 100, 1000
#will receive results by indentation later
res_select=np.empty_like(idx)
for id in idx :
#origin point x,y,z
xi, yi, zi = x[id], y[id], z[id]
#cutting to smaller chunk
cond_xy_cut = ((xi-max_distance)
Подробнее здесь: https://stackoverflow.com/questions/790 ... ectorizing