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

#python #performance #numpy #distance

#python #Производительность #numpy #расстояние

Вопрос:

 import numpy

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

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

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

Комментарии:

1. Каковы размеры punto1 и punto2 ?

Ответ №1:

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

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

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

Ответ №2:

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

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