目前我有:
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)
答案 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
计算平方根,从而移动总和中的平方根。这反映了你问题中的等式,尽管你的代码做了不同的事情。