我想计算数组中每个元素在其之前的元素之间的相对排名。例如,在数组[2,1,4,3]中,[2,1]的子集数组中第二个元素(1)的相对排名(从小到大)为1。 [2,1,4]的子集数组中的元素(4)为3。每个元素的最终相对排名应该为[1,1,3,3]。
我正在使用以下python代码:
x=np.array([2,1,4,3])
rr=np.ones(4)
for i in range(1,4):
rr[i]=sum(x[i]>=x[:i+1])
还有其他更快的方法吗?
谢谢!
n = len(x)
m1 = x[1:,None]>=x
m2 = np.tri(n-1,n,k=1, dtype=bool)
rr[1:] = (m1 & m2).sum(1)