Numpy argsort 与 Scipy.stats 排名数据

Bor*_*der 7 python numpy scipy

我最近使用了这两个功能,并且正在寻找任何可以说出以下内容的人的意见:

  • argsort 和rankdata 的用途有根本不同吗?
  • 其中一种相对于另一种是否有性能优势?(具体来说:大型阵列与小型阵列的性能差异?)
  • 导入排名数据相关的内存开销是多少?

提前致谢。

ps 我无法创建新标签“argsort”或“rankdata”。如果任何有足够地位的人认为他们应该添加到这个问题中,请这样做。

ntg*_*ntg 6

argsort 和rankdata 的用途有根本不同吗?

在我看来,他们确实有一点点。如果数据已排序,第一个给出数据的位置,而第二个给出数据的排名。在关系的情况下,差异会变得很明显:

import numpy as np
from scipy import stats

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(almost_ranks+1)
print(stats.rankdata(a))
Run Code Online (Sandbox Code Playgroud)

结果(通知3. 4. 54. 4. 4):

[6. 0. 1. 2. 3. 4. 5. 7.]
[7. 1. 2. 3. 4. 5. 6. 8.]
[7. 1. 2. 4. 4. 4. 6. 8.]
Run Code Online (Sandbox Code Playgroud)

其中一种相对于另一种是否具有性能优势?(具体来说:大型阵列与小型阵列的性能差异?)

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

导入排名数据相关的内存开销是多少?

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