Как бы вы улучшили производительность этой функции?
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 хорошо известен.