Как указать количество узловых точек при использовании scipy.splprep
У меня есть следующий фрагмент кода. Он генерирует трехмерный кубический сплайн данной трехмерной функции, заданной в параметрической форме. Я приспособил это к моему делу с использованием интерактивной документации для splprep и splev.
Но у меня есть кое-что, чего я не понимаю. Вот код:
%matplotlib inline
from numpy import arange, cos, linspace, pi, sin, random
from scipy.interpolate import splprep, splev
import matplotlib.pyplot as plt
# make ascending spiral in 3-space
t=linspace(0,1.75*2*pi,100)
x = sin(t)
y = cos(t)
z = t
# spline parameters
s=3.0 # smoothness parameter
k=3 # spline order
nest=-1 # estimate of number of knots needed (-1 = maximal)
# find the knot points
tck,u = splprep([x,y,z],s=s,k=k,nest=-1)
# evaluate spline, including interpolated points
xnew,ynew,znew = splev(linspace(0,1,400),tck)
У меня есть несколько вопросов относительно этой реализации.
Что именно возвращает кортеж
(t,c,k)в этом случае?. Я ознакомился с документацией и он говорит, что возвращает узловые точки, коэффициенты и степень сплайна. Разве узловые точки не должны быть координатами вида (x, y, z)?. Поэтому мы должны иметь"number of knots"такие точки координат. Но это не то, что возвращается. Мы просто получаем возвращенный массивlength 11.
Что возвращает
u? (В документации говорится, что он возвращает значения параметра. Что это значит?. Значения параметраt?
Когда я использую nest = -1 (Это по умолчанию) он использует максимальное количество необходимых узловых точек (в этом случае они используют
11узловые точки). Но как я могу указать свое собственное число узловых точек, скажем, 50 или 80 и т. д.?
Я совершенно неправильно понимаю документацию здесь. Может быть, кто-то просветит меня, используя примеры?
1 ответ:
Значения параметра, u
Идея состоит в том,что ваши точки [x,y, z] являются значениями некоторой параметризованной кривой, исходный параметр которой в вашем примере равен t. Знание значений параметра t помогает понять, как интерполировать между этими точками. По этой причине вам предоставляется возможность передать значения параметра в качестве необязательного аргументаu(в данном примере это будетu=t). Но если вы решите этого не делать, метод сделает предположение о значениях параметр, основанный на расстояниях между заданными точками (интервал параметра будет от 0 до 1). Это предположение затем возвращается вам в виде переменнойu, так что вы знаете, как были интерпретированы данные. Если вы передадите u=t в качестве аргумента, тоu, которое вы получите, будет точно таким же.Вам действительно не нужно это
u, чтобы использовать сплайн. Однако, если желательно сравнить расположение исходных точек [x, y, z] со значениями сплайна, то можно передатьuкак аргумент кsplev. Более короткий способ объяснить значениеu: это то, чтоsplevпотребуется для воспроизведения координат[x,y,z], с которыми вы начали, с некоторыми отклонениями из-за сглаживания.Значения Tck
Узлы сплайна,t, являются точками в интервале параметров , а не в трехмерном пространстве. Поскольку в вашем примере интервал параметра равен [0,1], выбранному по умолчанию, значения t находятся в этом диапазоне. Узел - это место на параметре интервал, в котором изменяются некоторые коэффициенты сплайна. Конечные точки 0 и 1 технически являются несколькими узлами, поэтому они перечислены несколько раз. Трехмерная природа кривой выражается коэффициентамиc. Вы можете заметить, что это список из трех массивов, по одному для каждой координаты.Количество узловых точек
С этой процедурой интерполяции у вас есть два варианта:
Однако количество узлов зависит от значения параметра гладкости
- скажите ему точно, что такое узловые точки (давая
Оставьте определение узлов до рутины, включая их количество.task=-1и предоставляяtспор с узлами). Чтобы избежать путаницы: этоtне обязательно являетсяt, из которого вы получили точки [x,y, z]. Не обязательно, чтобы каждая точка выборки была узловой точкой.s, поэтому на него можно влиять косвенно. Например, с вашими данными есть 11 узлов с s=3, но 12 узлов с s=1 и 14 узлов с s=0,1.
Comments