У меня есть следующий вопрос о более быстром способе вычисления жесткого преобразования (да, я знаю, что могу просто использовать библиотеку, но мне нужно кодировать это самостоятельно).
Мне нужно вычислить x' и y' для каждого x, y в заданном изображении. Мое главное узкое место — скалярное произведение по всем координатам (интерполяция после этого не проблема). На данный момент я реализовал три варианта:
понимание списка
result = np.array([[np.dot(matrix, np.array([x, y, 1])) for x in xs] for y in ys])
простая двойная
for
петляresult = np.zeros((Y, X, 3)) for x in xs: for y in ys: result[y, x, :] = np.dot(matrix, np.array([x, y, 1]))
np.ndenumerate
result = np.zeros((Y, X, 3)) for (y, x), value in np.ndenumerate(image): result[y, x, :] = np.dot(matrix, np.array([x, y, 1]))
Самый быстрый способ в изображениях 512x512 — это понимание списка (примерно в 1,5 раза быстрее, чем np.ndenumerate
, и в 1,1 раза быстрее, чем двойной цикл for).
Есть ли способ сделать это быстрее?