回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一条复杂的曲线,定义为表中的一组点,如so(完整的表是<a href="http://pastebin.com/1w1dUXQy" rel="noreferrer">here</a>):</p>
<pre><code># x y
1.0577 12.0914
1.0501 11.9946
1.0465 11.9338
...
</code></pre>
<p>如果我使用命令打印此表:</p>
<pre><code>plt.plot(x_data, y_data, c='b',lw=1.)
plt.scatter(x_data, y_data, marker='o', color='k', s=10, lw=0.2)
</code></pre>
<p>我得到以下信息:</p>
<p><img src="https://i.stack.imgur.com/5Tdsx.png" alt="enter image description here"/></p>
<p>我已经手动添加了红点和分段。我需要的是一种计算每个点的线段的方法,也就是:<em>一种从这个二维空间中的给定点到插值曲线的最小距离的方法。</p>
<p>我不能使用到数据点本身(生成蓝色曲线的黑点)的距离,因为它们不是以相等的间隔定位的,有时它们很接近,有时它们相距很远,这深深地影响了我的结果。</p>
<p>因为这不是一个行为良好的曲线,我真的不知道我能做什么。我试过用<a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.UnivariateSpline.html" rel="noreferrer">UnivariateSpline</a>插入它,但它返回的拟合度非常差:</p>
<pre><code># Sort data according to x.
temp_data = zip(x_data, y_data)
temp_data.sort()
# Unpack sorted data.
x_sorted, y_sorted = zip(*temp_data)
# Generate univariate spline.
s = UnivariateSpline(x_sorted, y_sorted, k=5)
xspl = np.linspace(0.8, 1.1, 100)
yspl = s(xspl)
# Plot.
plt.scatter(xspl, yspl, marker='o', color='r', s=10, lw=0.2)
</code></pre>
<p><img src="https://i.stack.imgur.com/uzRLZ.png" alt="enter image description here"/></p>
<p>我还尝试增加插值点的数量,但结果一团糟:</p>
<pre><code># Sort data according to x.
temp_data = zip(x_data, y_data)
temp_data.sort()
# Unpack sorted data.
x_sorted, y_sorted = zip(*temp_data)
t = np.linspace(0, 1, len(x_sorted))
t2 = np.linspace(0, 1, 100)
# One-dimensional linear interpolation.
x2 = np.interp(t2, t, x_sorted)
y2 = np.interp(t2, t, y_sorted)
plt.scatter(x2, y2, marker='o', color='r', s=10, lw=0.2)
</code></pre>
<p><img src="https://i.stack.imgur.com/xwXTt.png" alt="enter image description here"/></p>
<p>任何想法/建议都将非常感谢。</p>