擅长:python、mysql、java
<p>结果不同(但都可能正确)的原因是<code>UnivariateSpline</code>和<code>interp1d</code>使用的插值例程不同。</p>
<ul>
<li><p><code>interp1d</code>使用作为结给它的<code>x</code>点构造一个平滑的B样条曲线</p></li>
<li><p><code>UnivariateSpline</code>基于FITPACK,它还构造了一个平滑的B样条曲线。但是,FITPACK尝试为样条曲线选择<em>新的</em>节点,以便更好地拟合数据(可能是为了最小化chi^2加上曲率的一些惩罚,或类似的东西)。您可以通过<code>g.get_knots()</code>找到它使用的结点。</p></li>
</ul>
<p>所以得到不同结果的原因是插值算法不同。如果要在数据点处使用节点的B样条曲线,请使用<code>interp1d</code>或<code>splmake</code>。如果您想要FITPACK的功能,请使用<code>UnivariateSpline</code>。在稠密数据的限制下,两种方法给出的结果相同,但当数据稀疏时,可能得到不同的结果。</p>
<p>(我怎么知道这些:我读了代码:-)</p>