Python中此函数的最短表示

时间:2010-12-10 05:30:10

标签: python math

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 个答案:

答案 0 :(得分:7)

有一个用于序列求和的内置函数,称为sum(奇怪的是)。我们可以使用生成器理解来创建数据,并将其直接提供给sum函数。因此:

return math.sqrt(sum((p[0]-centroid[0])**2 + (p[1]-centroid[1])**2 for p in points))

答案 1 :(得分:1)

由于您使用的是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应该比使用Python的sum更快。

注意:hypot计算平方根,从而移动总和中的平方根。这反映了你问题中的等式,尽管你的代码做了不同的事情。