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”)

  • “average”:将分配给所有并列值的排名的平均值分配给每个值。

  • “min”:将分配给所有并列值的排名的最小值分配给每个值。(这也称为“竞争”排名。)

  • “max”:将分配给所有并列值的排名的最大值分配给每个值。

  • “dense”:类似于“min”,但下一个最高元素的排名被分配给紧随分配给并列元素的排名之后。

  • “ordinal”:所有值都被赋予不同的排名,对应于值在 a 中出现的顺序。

axis{None, int}, optional

执行排名的轴。如果 None,则数据数组首先被扁平化。

nan_policy{‘propagate’, ‘omit’, ‘raise’}, optional

定义输入包含 nan 时如何处理。以下选项可用(默认为“propagate”)

  • “propagate”:通过排名计算传播 nans

  • “omit”:执行计算时忽略 nan 值

  • “raise”:引发错误

注意

nan_policy 为“propagate”时,输出是所有 nans 的数组,因为相对于输入中 nans 的排名是未定义的。 当 nan_policy 为“omit”时,在对其他值进行排名时会忽略 a 中的 nans,并且输出的相应位置是 nan。

1.10 版本中新增。

返回:
ranksndarray

大小等于 a 大小的数组,包含排名分数。

注释

rankdata 除了 NumPy 之外,还实验性地支持与 Python Array API Standard 兼容的后端。请考虑通过设置环境变量 SCIPY_ARRAY_API=1 并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他能力)的组合。

CPU

GPU

NumPy

不适用

CuPy

不适用

PyTorch

JAX

⚠️ 无 JIT

⚠️ 无 JIT

Dask

不适用

有关更多信息,请参见 支持数组 API 标准

参考文献

示例

>>> 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])