#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 хорошо известен.