<p>我刚碰到同样的问题。</p>
<h2>简短的回答</h2>
<p>请改用<a href="http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.interpolate.InterpolatedUnivariateSpline.html#scipy.interpolate.InterpolatedUnivariateSpline" rel="noreferrer">InterpolatedUnivariateSpline</a>:</p>
<pre><code>f = InterpolatedUnivariateSpline(row1, row2)
return f(interp)
</code></pre>
<h2>冗长的回答</h2>
<p><a href="http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.interpolate.UnivariateSpline.html#scipy.interpolate.UnivariateSpline" rel="noreferrer">UnivariateSpline</a>是“适合给定数据点集的一维平滑样条曲线”,而<a href="http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.interpolate.InterpolatedUnivariateSpline.html#scipy.interpolate.InterpolatedUnivariateSpline" rel="noreferrer">InterpolatedUnivariateSpline</a>是“给定数据点集的一维插值样条曲线”。前者平滑数据,而后者是一种更为传统的插值方法,并再现了<a href="http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.interpolate.interp1d.html#scipy.interpolate.interp1d" rel="noreferrer">interp1d</a>中预期的结果。下图说明了区别。</p>
<p><img src="https://i.stack.imgur.com/f6M7f.png" alt="Comparison of interpolation functions"/></p>
<p>复制该图的代码如下所示。</p>
<pre><code>import scipy.interpolate as ip
#Define independent variable
sparse = linspace(0, 2 * pi, num = 20)
dense = linspace(0, 2 * pi, num = 200)
#Define function and calculate dependent variable
f = lambda x: sin(x) + 2
fsparse = f(sparse)
fdense = f(dense)
ax = subplot(2, 1, 1)
#Plot the sparse samples and the true function
plot(sparse, fsparse, label = 'Sparse samples', linestyle = 'None', marker = 'o')
plot(dense, fdense, label = 'True function')
#Plot the different interpolation results
interpolate = ip.InterpolatedUnivariateSpline(sparse, fsparse)
plot(dense, interpolate(dense), label = 'InterpolatedUnivariateSpline', linewidth = 2)
smoothing = ip.UnivariateSpline(sparse, fsparse)
plot(dense, smoothing(dense), label = 'UnivariateSpline', color = 'k', linewidth = 2)
ip1d = ip.interp1d(sparse, fsparse, kind = 'cubic')
plot(dense, ip1d(dense), label = 'interp1d')
ylim(.9, 3.3)
legend(loc = 'upper right', frameon = False)
ylabel('f(x)')
#Plot the fractional error
subplot(2, 1, 2, sharex = ax)
plot(dense, smoothing(dense) / fdense - 1, label = 'UnivariateSpline')
plot(dense, interpolate(dense) / fdense - 1, label = 'InterpolatedUnivariateSpline')
plot(dense, ip1d(dense) / fdense - 1, label = 'interp1d')
ylabel('Fractional error')
xlabel('x')
ylim(-.1,.15)
legend(loc = 'upper left', frameon = False)
tight_layout()
</code></pre>