2 Stimmen

Kürzeste Darstellung dieser Funktion in Python

equation

Derzeit habe ich:

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)

7voto

Karl Knechtel Punkte 55450

Es gibt ein Builtin für die Summierung einer Folge, genannt sum (merkwürdigerweise). Wir können die Daten mit einem Generator-Verständnis erstellen und sie direkt in die sum Funktion. So:

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

1voto

mtrw Punkte 31777

Da Sie NumPy verwenden, können Sie numpy.hypot :

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

Ich glaube, obwohl ich mir nicht sicher bin, dass die Indizierung mit der numpy-Syntax [:,n] schneller ist als eine Listenauflösung. Ähnlich ist die Verwendung von np.sum sollte schneller sein als die Verwendung von Pythons sum .

NOTA: hypot berechnet die Quadratwurzel, wodurch die Quadratwurzel in die Summe verschoben wird. Dies entspricht der Gleichung in Ihrer Frage, obwohl Ihr Code etwas anderes tut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X