我有使用时间积分计算出的轨道。(x, y)这些轨道的每个位置都有坐标。这种轨道的一个例子如下图所示:

这实际上意味着一个序列,其中 0 表示 x 在时间t_n和之间改变了符号,1 表示 y 在和t_n+1之间改变了符号。对于上图,该系列将如下所示:t_nt_n+1Pxy[n] = 1 0 1 0 1 0 ...
目前我已经找到了多种解决方案。但它们在我使用的大型数据集上都非常慢。上面显示的示例轨道的 x 和 y 坐标数组有 10,000,000 个元素。它需要这么多元素,因为为了足够准确,积分算法中的时间步需要非常小。我能想到的最快算法运行时间大约为 5.3 秒。然而,相同的算法需要针对不同的轨道运行 100 多次。这意味着这将需要很长时间。
我本质上有两种计算方法:第一种算法基于这个问题:“ EfficientlyDetectsign-changesinpython ”并使用numpy:
def calc_Pxy():
Pxy = np.full(x.shape, -1)
Pxy[np.where(np.diff(np.signbit(x)))] = 0
Pxy[np.where(np.diff(np.signbit(y)))] = 1
return Pxy[Pxy >= 0]
Run Code Online (Sandbox Code Playgroud)
第二种解决方案仅使用一个简单的 for 循环:
def calc_Pxy():
Pxy = np.full(x.shape, -1)
Pxy[np.where(np.diff(np.signbit(x)))] = 0
Pxy[np.where(np.diff(np.signbit(y)))] = 1
return Pxy[Pxy >= 0] …Run Code Online (Sandbox Code Playgroud)