18

私はテーブル内のポイントのセットとして定義された複雑な曲線を持っています (完全なテーブルはこちらです):

#  x   y
1.0577  12.0914
1.0501  11.9946
1.0465  11.9338
...

コマンドを使用してこのテーブルをプロットすると、次のようになります。

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)

私は以下を取得します:

ここに画像の説明を入力

赤い点とセグメントを手動で追加しました。私が必要としているのは、これらの点ごとにこれらのセグメントを計算する方法です。つまり、この 2D 空間内の特定の点から補間された曲線までの最小距離を見つける方法です。

データ ポイント自体 (青い曲線を生成する黒い点) までの距離を使用することはできません。データ ポイントは等間隔に配置されていないためです。近くにある場合もあれば、離れている場合もあり、これがさらに下の結果に深く影響します。ライン。

これは適切に動作する曲線ではないため、何ができるかわかりません。私はUnivariateSplineで補間しようとしましたが、非常に悪い適合を返します:

# 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)

ここに画像の説明を入力

また、補間ポイントの数を増やしてみましたが、混乱しました:

# 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)

ここに画像の説明を入力

アイデア/ポインタは大歓迎です。

4

4 に答える 4