来自the documentation:
c (ndarray, shape (4, n-1, ...)) 每个段上多项式的系数。尾随尺寸与y 的尺寸相匹配,
不包括轴。例如,如果 y 是 1-d,那么 c[k, i] 是
(x-x[i])**(3-k) 在x[i] 和之间的段上的系数
x[i+1].
因此,在您的示例中,第一段 [x1, x2] 的系数将在第 0 列中:
-
y1 将是
s.c[3, 0]
-
b1 将是
s.c[2, 0]
-
c1 将是
s.c[1, 0]
-
d1 将是
s.c[0, 0]。
那么对于第二段 [x2, x3] 你会得到s.c[3, 1], s.c[2, 1], s.c[1, 1] s.c[0, 1] 代表 y2、b2、c2、d2,以此类推。
例如:
x = np.array([1, 2, 4, 5]) # sort data points by increasing x value
y = np.array([2, 1, 4, 3])
arr = np.arange(np.amin(x), np.amax(x), 0.01)
s = interpolate.CubicSpline(x, y)
fig, ax = plt.subplots(1, 1)
ax.hold(True)
ax.plot(x, y, 'bo', label='Data Point')
ax.plot(arr, s(arr), 'k-', label='Cubic Spline', lw=1)
for i in range(x.shape[0] - 1):
segment_x = np.linspace(x[i], x[i + 1], 100)
# A (4, 100) array, where the rows contain (x-x[i])**3, (x-x[i])**2 etc.
exp_x = (segment_x - x[i])[None, :] ** np.arange(4)[::-1, None]
# Sum over the rows of exp_x weighted by coefficients in the ith column of s.c
segment_y = s.c[:, i].dot(exp_x)
ax.plot(segment_x, segment_y, label='Segment {}'.format(i), ls='--', lw=3)
ax.legend()
plt.show()