Python中双相对位置循环的快速计算

Python中双相对位置循环的快速计算,python,for-loop,matrix,parallel-processing,sparse-matrix,Python,For Loop,Matrix,Parallel Processing,Sparse Matrix,计算数组X[n]的相对位置有以下问题: 我目前正在进行以下计算: 让我们取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,-

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

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

让我们取
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阵列,此计算非常慢!有人对如何加快速度有什么建议吗?由于中间的“辅助”步骤,Parall不是那么容易的!我在考虑一些矩阵方法。

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

X=np.数组([1,2,3,4,5,6,7,8,9,10])
然后像这样做一个矢量化循环:

D=[np.sum(np.sign(X[idx1]-X[idx1:]),用于范围(0,len(X))内的idx1]
应该快得多


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

这使得Jerôme Richard的计算速度更快。是的,这个算法是一个自顶向下的算法,计算效率非常低!非常感谢分享您的解决方案。也谢谢你@Mark Mayer!两种解决方案都很棒!