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]:
(array([3.39368997]), array([-0.10630681, -0.30939141]))

In [ ]: