Как бы вы улучшили производительность этой функции?

import numpy

def euclideanClassification(punto1, punto2):
    return (numpy.dot(punto2, punto1) - ((1.0/2.0) * numpy.dot(punto1, punto1)))

Я пытаюсь улучшить производительность этой функции, но не знаю как.

Эта функция является вариантом евклидова расстояния, используемого при распознавании образов.

2 ответа

Если я не ошибаюсь, эта формула должна быть эквивалентна этой:

numpy.dot(punto2 - 0.5 * punto1, punto1)

но если вы напишите это так, вы сохраните три умножения, поэтому в теории это должно быть немного быстрее.

Вы можете использовать Cython для этой задачи.

[Cython] - это язык программирования, основанный на Python, с дополнительным синтаксисом, допускающим необязательные объявления статических типов. Он стремится стать надмножеством языка [Python], который дает ему высокоуровневое, объектно-ориентированное, функциональное и динамическое программирование. Исходный код преобразуется в оптимизированный код C/C++ и компилируется как модули расширения Python. Это обеспечивает как очень быстрое выполнение программы, так и тесную интеграцию с внешними библиотеками C, сохраняя при этом высокую производительность программистов, для которых язык Python хорошо известен.

Другие вопросы по тегам