<p>您的问题是您试图插值超出间隔的点,这导致<code>scipy.interpolate.interp1d</code>在试图计算两点之间的斜率时启动<code>RuntimeWarning</code>(它发生在插值e.py416号线附近):</p>
<pre><code>slope = (y_hi - y_lo) / (x_hi - x_lo)[:, None]
</code></pre>
<p>看看在间隔内移动点时会发生什么:</p>
^{pr2}$
<p>如果你把它画出来,你会发现一切都是有意义的:</p>
<p><img src="https://i.stack.imgur.com/D0m2r.png" alt="enter image description here"/></p>
<p>这就是<code>interp1d</code>的工作原理:</p>
<ol>
<li>将<code>x</code>和{<cd5>}传递给<code>interp1d</code>,它将创建一个<code>f</code>可调用方法</li>
<li><p>然后传递新的<code>x_new</code>值,其中要计算<code>f</code>,它将执行以下步骤:</p>
<ul>
<li><p>找到原始数据中插入插值值的位置。在</p>
<pre><code>>>> x_new_indices = np.searchsorted(x, X)
</code></pre></li>
<li><p>剪辑x_新的指数,使它们在<code>x</code>指数的范围内,并且至少为1。删除<code>x_new[n] = x[0]</code>的错误插值</p>
<pre><code>>>> x_new_indices = x_new_indices.clip(1, len(x)-1).astype(int)
</code></pre></li>
<li><p>计算每个区域的斜率。在</p>
<pre><code>>>> lo = x_new_indices - 1
>>> hi = x_new_indices
>>> x_lo = x[lo]
>>> x_hi = x[hi]
>>> y_lo = y[lo]
>>> y_hi = y[hi]
</code></pre></li>
<li><p>计算<code>x_new</code>中每个条目的实际值。在</p>
<pre><code>>>> slope = (y_hi - y_lo) / (x_hi - x_lo)[:, None]
>>> y_new = slope*(x_new - x_lo)[:, None] + y_lo
</code></pre></li>
</ul></li>
</ol>