Как бы вы улучшили производительность этой функции? - PullRequest
1 голос
/ 20 октября 2011
import numpy

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

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

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

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

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

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

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

0 голосов
/ 20 октября 2011

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

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

...