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