问题描述
我有一个 DataFrame,其中包含许多轨迹的 X 和 Y 数据(不是 GPS 数据)。
我想弄清楚如何对它们进行重新采样/时间标准化,以便点之间的距离均匀分布。
就像现在一样,轨迹中有些区域的点密度更高。
在下面的散点图中,我展示了一条整体轨迹,然后放大了轨迹的一部分以显示点的密度如何变化(即点之间的间距是不规则的)。
我的数据框如下所示:
(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
在原始域之外,这将失败 - 这是有道理的,因为它只是线性插值。