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)
)。
我有以下计算数组 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)
)。