Кратчайшее представление этой функции в Python - PullRequest
2 голосов
/ 10 декабря 2010

equation

В настоящее время у меня есть:

def func(points): #Input is a matrix with n lines and 2 columns.
    centroid = numpy.mean(points, axis=0)
    sum = 0
    for point in points:
        x = point[0] - centroid[0]
        y = point[1] - centorid[1]
        sum += x**2 + y**2
    return math.sqrt(sum)

Ответы [ 2 ]

7 голосов
/ 10 декабря 2010

Существует встроенная функция суммирования последовательности, которая называется sum (как ни странно). Мы можем создать данные с помощью генератора и передать их непосредственно в функцию sum. Таким образом:

return math.sqrt(sum((p[0]-centroid[0])**2 + (p[1]-centroid[1])**2 for p in points))
1 голос
/ 10 декабря 2010

Поскольку вы используете NumPy, вы можете использовать numpy.hypot:

def func(points):
    centroid = np.mean(points, axis=0)
    return np.sum(np.hypot(points[:,0]-centroid[0], points[:,1]-centroid[1]))

Мне кажется, хотя я не уверен, что индексирование с использованием синтаксиса numpy [:, n] быстрее, чем понимание списка. Точно так же использование np.sum должно быть быстрее, чем использование sum в Python.

ПРИМЕЧАНИЕ: hypot вычисляет квадратный корень, таким образом перемещая квадратный корень внутри суммы. Это отражает уравнение в вашем вопросе, хотя ваш код делает что-то другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...