gpt4 book ai didi

python - 如何生成等距插值

转载 作者:太空狗 更新时间:2023-10-29 17:41:31 24 4
gpt4 key购买 nike

我有一个不均匀间隔的 (x,y) 值列表。 Here是这个问题中使用的存档。

我能够在值之间进行插值,但我得到的不是等距插值点。这是我的做法:

x_data = [0.613,0.615,0.615,...]
y_data = [5.919,5.349,5.413,...]

# Interpolate values for x and y.
t = np.linspace(0, 1, len(x_data))
t2 = np.linspace(0, 1, 100)
# One-dimensional linear interpolation.
x2 = np.interp(t2, t, x_data)
y2 = np.interp(t2, t, y_data)

# Plot x,y data.
plt.scatter(x_data, y_data, marker='o', color='k', s=40, lw=0.)

# Plot interpolated points.
plt.scatter(x2, y2, marker='o', color='r', s=10, lw=0.5)

结果是:

enter image description here

可以看出,在原始点分布较密集的图形部分,红点靠得更近。

我需要一种方法来根据给定的步长值(例如 0.1)在 x、y 中生成等距的插值


正如 askewchan 正确指出的那样,当我的意思是“在 x, y 中等间距”时,我的意思是曲线中两个连续的插值点应该彼此远离(欧几里德直线距离)相同的值。


我尝试了 unubtu 的答案,它适用于平滑的曲线,但对于不太平滑的曲线似乎会中断:

non-smooth-curve

发生这种情况是因为代码以欧几里得方式而不是直接在曲线上计算点距离,我需要曲线上的距离在点之间相同。这个问题能以某种方式解决吗?

最佳答案

将您的 xy 数据转换为参数化曲线,即计算所有点之间的所有距离,并通过累积求和生成曲线上的坐标。然后相对于新坐标独立地插值 x 和 y 坐标。

import numpy as np
from matplotlib import pyplot as plt

data = '''0.615 5.349
0.615 5.413
0.617 6.674
0.617 6.616
0.63 7.418
0.642 7.809
0.648 8.04
0.673 8.789
0.695 9.45
0.712 9.825
0.734 10.265
0.748 10.516
0.764 10.782
0.775 10.979
0.783 11.1
0.808 11.479
0.849 11.951
0.899 12.295
0.951 12.537
0.972 12.675
1.038 12.937
1.098 13.173
1.162 13.464
1.228 13.789
1.294 14.126
1.363 14.518
1.441 14.969
1.545 15.538
1.64 16.071
1.765 16.7
1.904 17.484
2.027 18.36
2.123 19.235
2.149 19.655
2.172 20.096
2.198 20.528
2.221 20.945
2.265 21.352
2.312 21.76
2.365 22.228
2.401 22.836
2.477 23.804'''

data = np.array([line.split() for line in data.split('\n')],dtype=float)

x,y = data.T
xd = np.diff(x)
yd = np.diff(y)
dist = np.sqrt(xd**2+yd**2)
u = np.cumsum(dist)
u = np.hstack([[0],u])

t = np.linspace(0,u.max(),10)
xn = np.interp(t, u, x)
yn = np.interp(t, u, y)

f = plt.figure()
ax = f.add_subplot(111)
ax.set_aspect('equal')
ax.plot(x,y,'o', alpha=0.3)
ax.plot(xn,yn,'ro', markersize=8)
ax.set_xlim(0,5)

plot generated by code

关于python - 如何生成等距插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19117660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com