У меня есть pandas DataFrame, df
, значений точек в форме
| X | Y |
|-------|
|x0 | y0|
df = |x1 | y1|
|x2 | y2|
...
|xn | yn|
У меня также есть объект scipy.interpolate.Bspline
, bs
, от scipy. Я хочу, чтобы для каждой точки (xi, yi) в df
было найдено минимальное расстояние между (xi, yi) и bs
.
В данный момент Я запускаю для l oop, который делает что-то вроде следующего:
class DistanceFunctor:
def __init__(self, point, spline):
self.point = point
self.spline = spline
def __call__(self, t):
return distance_between_points(self.point, self.spline(t))
result = []
for xy in df.iterrows():
result.append(minimize_scalar(DistanceFunctor(xy, bs)).fun)
, где distance_between_points
- это просто формула обычного расстояния от математики. Другими словами, я беру точку, создаю DistanceFunctor с точкой и сплайном, затем запускаю функцию minimize_scalar
для DistanceFunctor. Я делаю это для каждой точки. Результаты верны, но это очень медленно, чтобы сделать это для каждой точки в моем фрейме данных.
Мне было интересно, есть ли какой-нибудь способ векторизации этой операции, так как сплайн постоянен , Единственное, что меняется каждый раз в течение для l oop, это то, какой пункт я использую.
Спасибо за вашу помощь, и если есть какая-либо дополнительная информация, которую я могу предоставить, пожалуйста, не стесняйтесь спрашивать .
Обратите внимание, что приведенный выше код не является моим точным кодом, а урезанным кодом, который я могу отобразить в этом вопросе.