Numpy argsort vs Scipy.stats rankdata

时间:2018-03-23 15:40:41

标签: python numpy scipy

我最近使用了这两个功能,并且正在寻找能够与以下人士交流的人的意见:

  • 做argsort和rankdata在目的上有根本的不同吗?
  • 一个在另一个上有性能优势吗? (具体来说:大型与小型阵列的性能差异?)
  • 导入rankdata的内存开销是多少?

提前致谢。

P.S。我无法创建新标签' argsort'或者' rankdata'。如果有任何有足够信誉的人觉得他们应该加入这个问题,请做。

1 个答案:

答案 0 :(得分:1)

  

argsort和rankdata在目的上有根本的不同吗?

在我看来,他们略有做法。如果数据已排序,第一个给出数据的位置,第二个给出数据的rank。在关系的情况下,这种差异会变得明显:

a = np.array([ 5, 0.3,  0.4, 1, 1, 1, 3, 42])
almost_ranks = np.empty_like(a)
almost_ranks[np.argsort(a)] = np.arange(len(a))
print(almost_ranks)
print(scipy.stats.rankdata(a))

enter image description here

  

一个是否有性能优势?   (具体来说:大型与小型阵列的性能差异?)

在我看来,两种算法都具有相同的复杂性:O(NlgN)我希望numpy实现稍快一些,因为它有一点点开销,加上它的numpy。但你应该自己测试一下......检查scipy.rankdata的代码,它似乎是-at present,我的python ......-在其他函数中调用np.unique,所以我猜它在实践中需要更多...

  

导入rankdata的内存开销是多少?

好吧,你导入scipy,如果你以前没有这样做的话,那就是scipy的开销......