2016-05-31 3 views
0

У меня есть bspline, созданный с помощью scipy.interpolate.splrep с точками (x_0, y_0) до (x_n, y_n). Обычная история. Но я хотел бы добавить точку данных (x_n + 1, y_n + 1) и соответствующий узел без пересчета всего сплайна. Может ли кто-нибудь подумать об этом элегантно?B-сплайны с Scipy: могу ли я добавить datapoint без полного вознаграждения?

Я всегда мог взять список узлов, возвращенный splrep, и добавить на последнем узле меньшего сплайна, созданного с помощью (x_n-2, y_n-2), до (x_n + 1, y_n + 1), но это кажется менее эффективнее, чем это могло бы быть.

ответ

0

Короткий ответ: Нет

сплайн строительства представляет собой глобальный процесс, так что если вы добавляете точку данных, вам действительно нужно пересчитывать весь сплайн. Это связано с решением линейной системы N-by-N и т. Д.

Если вы добавляете много узлов последовательно, вы, вероятно, можете построить процесс, в котором вы используете факторизацию матрицы колокатора на этапе n для вычисления этап n+1. Вам нужно тщательно проверить стабильность этого процесса. И splrep и друзья не дают вам никакой помощи здесь, поэтому вам нужно написать это самостоятельно. (Если вы это сделаете, вам может быть полезно проверить источники interpolate.CubicSpline).

Но прежде чем вы начнете с этого, рассмотрите вместо этого использование локального интерполятора.

Если вы хотите добавить узел данных, то есть scipy.interpolate.insert.

Смежные вопросы