In [1]:
import numpy as np
import pandas as pd
In [5]:
# solution with cvxpy
from pyutil.cvx.util import Solver, cvx
In [33]:
# Find the center of a cloud of random points
def __solver(n):
R = cvx.Variable(1, "Radius")
x = cvx.Variable(2, "Midpoint")
points = cvx.Parameter((n,2), name="points")
# all points have to be within the radius
constraints = [cvx.norm(row - x, 2) <= R for row in points]
s = Solver(problem=cvx.Problem(objective=cvx.Minimize(R), constraints=constraints))
return s
def find_center(points):
n = points.shape[0]
s = __solver(n)
s.parameters["points"].value = points
s.solve()
return s.variables["Radius"].value, s.variables["Midpoint"].value
In [34]:
find_center(np.random.randn(1000,2))
Out[34]:
In [ ]: