Оптимизация производительности для расчета евклидова расстояния между двумя изображениями
Я реализовал алгоритм k-ближайших соседей в python, чтобы классифицировать некоторые случайно выбранные изображения из базы данных mnist . Однако я обнаружил, что моя дистанционная функция довольно медленная: анализ 10 тестовых изображений против учебного набора из 10 тыс. Изображений занимает около 2 минут. Изображения имеют разрешение 28×28 пикселей. Поскольку я новичок в python, я понял, что это может быть быстрее. Предполагается, что функция рассчитает эвклидовое расстояние между двумя изображениями в оттенках серого одинакового размера.
def calculateDistance(image1, image2): distance = 0 for i in range(len(image1)): for j in range(len(image1)): distance += math.pow((image1[i][j]-image2[i][j]),2) distance = numpy.sqrt(distance) return distance
- Ближайшие соседние одномерные данные с заданным диапазоном
- Neural Net Back Пропаганда не обучение
- Как я правильно помню этот алгоритм LIS python2.7?
- Определить и отсортировать несколько кругов на плоскости 2d с помощью python
- Как получить запасные части автомобиля с минимальными затратами?
Если вы используете массивы numpy для представления изображений, вы можете использовать следующее:
def calculateDistance(i1, i2): return numpy.sum((i1-i2)**2)
Это должно быть намного быстрее, потому что оно использует быструю реализацию C для тяжелого подъема. Также рассмотрите использование кеширования, чтобы не вычислять разницу двух изображений дважды.
1) вычислить разницу между двумя изображениями во временную переменную, а затем умножить эту переменную самостоятельно (операция на целые числа) вместо выполнения Math.pow, которая является операцией с плавающей запятой. 2) если вы просто сравниваете расстояния, например, чтобы найти пару с наименьшим расстоянием, не мешайте sqrt'ing в конце (это фактически не ускорит все, потому что оно не в цикле, но все равно не нужно, чтобы вы использовали результат только для относительных сравнений)
- UDP-соединение не получает никакого ответа от сервера – Python (возможно, также c ++ с использованием boost)
- специфический файл импорта python
- Стандартные библиотеки C или Python для вычисления стандартного отклонения нормального распределения
- Улучшение сортировки слияния
- Советы по проектированию структуры данных
- Лицевая кластеризация с использованием алгоритма Chinese Whispers
- Создание синтетических социальных сетей?
- Эффективный способ сохранения чисел в порядке
- Разделить строку на куски максимальной длины X – разделить только на пробелы
- Алгоритм последовательного сопоставления шаблонов в Python
- почему этот o (n) трехпозиционный алгоритм дизъюнктности медленнее, чем версия o (n ^ 3)?