使用numpy数组处理空间数据,如何快速获取角速度?

3
我正在以numpy数组的形式将空间数据存储在历史记录中。每行都是一个4维向量,其中第一列包含POSIX时间戳,其他三列包含实际的空间数据。这些空间向量都是单位向量,因此彼此只有旋转关系。
是否有某种方法可以计算条目之间的角速度?
手动完成这项操作,我需要逐个计算时间戳差dt,通过将第一列和条目之间的角度差计算为例如:
dt = np.diff(data[:,0])
for i in range(data.shape[0]):
    np.arccos(np.dot(data[i-1,1:], data[i,1:])) / dt[i]

但是,如所示,我会使用for循环来执行后者,因此希望有一些花哨的一行命令可以完成同样的工作,就像diff()一样,类似于

dt = np.diff(data[:,0])
da = np.ang_diff(data[:,1:3]) 
v =  da / dt
1个回答

1

我认为你可以使用np.einsum和一些切片来完成这个任务。

def ang_diff(data):
    return np.arccos(np.einsum('ij,ij->i', data[1:], data[:-1], optimize = True))

其余部分在我看来已经进行了充分的优化。

如果我将我的数据放入该函数中,结果只会得到NaN,并出现错误信息“RuntimeWarning: invalid value encountered in arccos”。 - Hendrik Wiese
你在开始的代码中是否已经去除了时间戳(即 ang_diff(data [:,1:3]))?请确认。 - Daniel F
我没有,谢谢。我还忘了把我的数据转换成单位向量。该死的隧道视野... - Hendrik Wiese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接