scipy.stats.

rankdata#

scipy.stats.rankdata(a, method='average', *, axis=None, nan_policy='propagate')[source]#

分配秩给数据,适当处理平局问题。

默认情况下(axis=None),数据数组首先被压平,返回平秩数组。如果需要,请分别将秩数组重新塑形为数据数组的形状(参见示例)。

秩从 1 开始。method 参数控制如何将秩分配给相同的值。有关排名方法的进一步讨论,请参见 [1]

参数:
aarray_like

待排序的值数组。

method{‘average’, ‘min’, ‘max’, ‘dense’, ‘ordinal’}, optional

用于分配秩给相等元素的方法。可以使用以下方法(默认为“平均”)

  • ‘average’: 将分配给所有绑定值的秩的平均值分配给每个值。

  • ‘min’: 将分配给所有绑定值的秩的最小值分配给每个值。(这也称为“竞赛”排名。)

  • ‘max’: 将分配给所有绑定值的秩的最大值分配给每个值。

  • ‘dense’:类似于‘min’,但是将最高元素的等级指定为紧靠与并列元素指定的等级之后。

  • ‘ordinal’:所有值都被赋予一个明确的等级,该等级对应于这些值在a 中出现的顺序。

axis{None, int},可选

执行等级时所在的轴。如果 None,则数据数组会首先展开。

nan_policy{‘propagate’,‘omit’,‘raise’,可选}

定义当输入包含 nan 时如何处理。可以选择以下选项(默认为‘propagate’)

  • ‘propagate’:通过等级计算传播 nan

  • ‘omit’:在计算时忽略 nan 值

  • ‘raise’:引发错误

注意

nan_policy 为‘propagate’时,输出是所有 nan 的数组,这是因为输入中相对于 nan 的等级是未定义的。当nan_policy 为‘omit’时,对a 中的 nan 进行等级排序时,则忽略 nan,而输出的对应位置变为 nan。

已添加至 1.10 版。

返回:
等级ndarray

一个大小等于a 大小的数组,包含等级得分。

参考

示例

>>> import numpy as np
>>> from scipy.stats import rankdata
>>> rankdata([0, 2, 3, 2])
array([ 1. ,  2.5,  4. ,  2.5])
>>> rankdata([0, 2, 3, 2], method='min')
array([ 1,  2,  4,  2])
>>> rankdata([0, 2, 3, 2], method='max')
array([ 1,  3,  4,  3])
>>> rankdata([0, 2, 3, 2], method='dense')
array([ 1,  2,  3,  2])
>>> rankdata([0, 2, 3, 2], method='ordinal')
array([ 1,  2,  4,  3])
>>> rankdata([[0, 2], [3, 2]]).reshape(2,2)
array([[1. , 2.5],
      [4. , 2.5]])
>>> rankdata([[0, 2, 2], [3, 2, 5]], axis=1)
array([[1. , 2.5, 2.5],
       [2. , 1. , 3. ]])
>>> rankdata([0, 2, 3, np.nan, -2, np.nan], nan_policy="propagate")
array([nan, nan, nan, nan, nan, nan])
>>> rankdata([0, 2, 3, np.nan, -2, np.nan], nan_policy="omit")
array([ 2.,  3.,  4., nan,  1., nan])