我有一个不同试验的轨迹列表,它们本身就是一个点列表......
trajectories = [[(x,y),(x,y), ...], [(x,y), ...], ...]
分数的数量因试验而异。
最终目标是在试验中绘制平均轨迹 +/- SEM(平均值的标准误差)。
据我所知,我应该得到最长的轨迹,并为每个剩余的轨迹添加“分辨率”到其他向量,使它们的长度相同,所以是这样的:
#find the maximum length
max_len = len(trajectories[0])
longest = []
for t in trajectories:
if len(t) > max_len:
max_len = len(t)
longest = t
# now transform the other vectors I assume using the longest vector or the length of this vector
newTrajectories = []
for i,t in enumerate(trajectories):
newTrajectories[i] = resample(t, longest or max_len, or something similar!!)
是否有一个函数给出 len X 的元组 (x,y) 和另一个 len Y 的 vec,其中 X>Y 在正确的位置向 Y vec 添加点 (x,y),例如使用前后的平均值点还是中位数?
编辑:我能想到的最简单的例子是使用 2 个轨迹向量:
vec_one = [(2,4),(3,5),(1,6)]
vec_two = [(2,4), (1,6)]
它们都从 x=2, y=4 开始,最终以 x=1, y=6 vec_one 结束,但是更长(花费了更多时间)。我认为为了能够对轨迹进行平均,vec_two 需要更长,所以我需要以某种方式推断缺少的 x,y 位置的值。
我一直在研究 scypi.interpolate 模块的 splprep、splrep 和 splev,但恐怕我还不太了解它们。
Edit2:实际上,我试图从 (x,y) 时间序列中抽象出时间。所以问题变成了在哪里引入新值以及我选择一个“站点”来插入值的标准,我推断值的方式现在似乎不那么重要了......