微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重新采样或归一化轨迹数据,使点均匀分布

如何解决重新采样或归一化轨迹数据,使点均匀分布

我有一个 DataFrame,其中包含许多轨迹的 X 和 Y 数据(不是 GPS 数据)。

我想弄清楚如何对它们进行重新采样/时间标准化,以便点之间的距离均匀分布。

就像现在一样,轨迹中有些区域的点密度更高。

在下面的散点图中,我展示了一条整体轨迹,然后放大了轨迹的一部分以显示点的密度如何变化(即点之间的间距是不规则的)。

overall trajectory

zoomed in portion with irregular spacing between points

我的数据框如下所示:

     (0,1,1)_mean_X  (0,1)_mean_Z  ...  (2,2,3)_mean_X  (2,3)_mean_Z
0          -15.856713          5.002617  ...        -15.874083         -5.000582
1          -15.831320          5.003529  ...        -15.848551         -5.000925
2          -15.805927          5.004441  ...        -15.823020         -5.001268
3          -15.780534          5.005353  ...        -15.797489         -5.001611
4          -15.755141          5.006265  ...        -15.771958         -5.001955
..                ...               ...  ...               ...               ...
995         15.547392         11.280298  ...         15.257689        -12.455845
996         15.548967         11.278968  ...         15.258225        -12.457202
997         15.550542         11.277638  ...         15.258761        -12.458560
998         15.552116         11.276309  ...         15.259296        -12.459917
999         15.553691         11.274979  ...         15.259832        -12.461275

解决方法

Pandas 有一个 interp 功能,但对于这样的处理,我更喜欢 numpy/scipy。矢量化函数通常比 Pandas 更快。示例:

from scipy.interpolate import interp1d

x = np.logspace(0,2,300)
y = x**2
df = pd.DataFrame(np.array([x,y]).T,columns=list("xy"))

# define interpolation function:
f = interp1d(x,y)

# create new df with desired x vals,generate y with interp function:
x_new = np.linspace(x.min(),x.max(),1000)
y_new = f(x_new)
df_new = pd.DataFrame(np.array([x_new,y_new]).T,columns=["x_new","y_new"])

请注意,如果 x_new 在原始域之外,这将失败 - 这是有道理的,因为它只是线性插值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。