如何对Python NumPy数组进行并列排序

如何对Python NumPy数组进行并列排序

在这篇文章中,我们将看到如何用Python对Numpy数组进行破格排名。

排列是一种基本的统计操作,用于数据科学、社会学等众多领域。一个非常粗暴的方法是将数组的索引按其相应的值排序。这种方法在不涉及给定数字组中相同数值的情况下会很方便。本文将更进一步,探讨Python库Scipy中的rankdata()函数,并说明它对有并列关系的列表的用法。

rankdata() 函数

为了计算排名,我们将使用Python中scipy.stats库的rankdata()函数。该函数有五种不同的打破平局的策略,其语法如下。

语法: scipy.stats.rankdata(arr, method=’average’, axis=None)

参数:

  • arr:一个n维的数组
  • method: 提到破局策略的字符串。它有5种类型。
    • ‘average’ : 将分配给所有并列值的等级的平均值分配给每个值。
    • ‘min’ : 将分配给所有并列值的最小等级分配给每个值。
    • ‘max’ : 将分配给所有并列值的最大等级分配给每个值。
    • ‘dense’ : 下一个最高元素的等级被分配到紧随分配给并列元素的等级之后。
    • ‘ordinal’ : 所有的值都有一个明显的等级,对应于这些值在arr中出现的顺序。
  • axis: 要进行排序的轴。如果没有,则首先对数据阵列进行平移。

返回:一个Numpy数组,其大小等于arr的大小,包含等级分数。

例子1:在一个一维Numpy数组上的排名

在这个例子中,我们将在一个一维的Numpy数组上探索所有的破局策略。

import numpy as np
from scipy.stats import rankdata
  
arr = np.array([-20, -10, -10, -10, 10,
                20, 20, 50, 50, 60, 60,
                60, 60, 60])
  
# Normal ranking; each value has distinct rank
print(f"Ordinal ranking: {rankdata(arr,
method='ordinal')}")
  
# Average ranking; each value's
# rank is averaged over all ties
print(f"Average ranking: {rankdata(arr,
method='average')}")
  
# Max ranking; each value's rank is the
# maximum ordinal rank for the corresponding
# tie
print(f"Max ranking: {rankdata(arr, 
method='max')}")
  
# Min ranking; each value's rank is
# the minimum ordinal rank for the corresponding 
# tie
print(f"Min ranking: {rankdata(arr,
method='min')}")
  
# Dense ranking; each value's rank
# is sequentially arranged
print(f"Dense ranking: {rankdata(arr,
method='dense')}")

输出:

如何对Python NumPy数组进行并列排序?

示例2:使用’axis’参数对一个二维Numpy数组沿某一轴线进行排序

在这个例子中,我们将在一个二维Numpy数组上沿行探索所有的破局策略。

arr = np.array([[-20, -10, -10, -10, 10, 20, 20],
                [50, 50, 60, -20, 60, 60, 60],
                [-20, 50, -10, -30, 60, 20, 60]])
  
# Normal ranking; each value has distinct rank
print(f"Ordinal ranking:\n {rankdata(arr,
method='ordinal', axis = 0)}")
  
# Average ranking; each value's
# rank is averaged over all ties
print(f"Average ranking:\n {rankdata(arr,
method='average', axis = 0)}")
  
# Max ranking; each value's rank is
# the maximum ordinal rank for
# the corresponding tie
print(f"Max ranking:\n {rankdata(arr,
method='max', axis = 0)}")
  
# Min ranking; each value's rank is the 
# minimum ordinal rank for the corresponding 
# tie
print(f"Min ranking:\n {rankdata(arr,
method='min', axis = 0)}")
  
# Dense ranking; each value's rank
# is sequentially arranged
print(f"Dense ranking:\n {rankdata(arr, 
method='dense', axis = 0)}")

输出:

如何对Python NumPy数组进行并列排序?

正如我们所看到的,二维数组’arr’中每一列的值都是通过比较同一行中的相应条目来分配等级。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy教程