Python 中 Double For 相对位置循环的更快计算

Faster Computation for Double For Relative Position Loop in Python

我有以下计算数组 X[n] 的相对位置的问题:

Equation Image

我目前正在进行以下计算:

我们取X = [1,2,3,4,5,6,7,8,9,10],然后:

D = []
for idx1 in range(0,len(X)):
    aux = []
    for idx2 in range(idx1, len(X)):
        aux.append(np.sign(X[idx1]-X[idx2]))
    D.append(np.sum(aux))

这段代码的输出是:

D = [-9, -8, -7, -6, -5, -4, -3, -2, -1, 0]

但是,对于太长的 X 数组,此计算非常慢!有人对如何使其更快有任何建议吗?由于中间 "aux" 步骤,并行不是那么容易的两个!我在考虑一些矩阵方法。

您之前可以将 X 转换为 np.array 类型。

X = np.array([1,2,3,4,5,6,7,8,9,10])

然后像这样执行矢量化循环:

D = [np.sum(np.sign(X[idx1]-X[idx1:])) for idx1 in range(0,len(X))]

应该会快很多。

请注意,可能有更聪明的算法。这一个在 O(n^2) 时间内计算结果(其中 n = len(X))。