【numpy基础】--数组排序

numpy,基础,数组,排序 · 浏览次数 : 73

小编点评

**numpy 数组排序** **1. 排序算法** - `sort` 函数:封装了多种排序算法,默认排序算法是 `quicksort`。 - `argsort` 函数:返回排序后的索引,用于获取排序后的结果。 **2. 行列排序** - `axis=0`:按行排序。 - `axis=1`:按列排序。 **3. 部分排序** - `partition` 函数:可以根据特定索引或条件对数组进行部分排序。 **4. 总结** - numpy 的排序提供了一种快速、灵活、可靠的排序方式。 - 针对数组做了更多的优化,排序效率比 Python 内置排序算法更高。 - 选择合适的排序算法和参数来进行数据排序。

正文

numpy 数组通常是用于数值计算的多维数组,而排序功能可以快速、准确地对数据进行排序,从而得到更加清晰、易于分析的结果。

在数据分析和处理过程中,常常需要对数据进行排序,以便更好地理解和发现其中的规律和趋势。

排序会应用在很多场景中,比如:

  1. 数据分类:将数据按照一定的特征进行分类,可以通过 numpy 数组排序来实现。
  2. 数据筛选:通过 numpy 数组排序,可以快速地筛选出符合特定条件的数据。
  3. 数据合并:多个 numpy 数组可以通过 numpy 数组排序来进行合并,从而得到一个更加完整、准确的数据集。

1. 排序算法

1.1. sort 函数

numpy中常用排序算法都是封装好的,通过 sort函数,可以直接使用常用的排序算法。

import numpy as np

arr = np.random.randint(0, 100, 10)
print(arr)
#运行结果
[44 11 36  0 83 90 54 40 36 34]

arr.sort(kind='quicksort')
print(arr)
#运行结果
[ 0 11 34 36 36 40 44 54 83 90]

arr.sort(kind='mergesort')
print(arr)
#运行结果
[ 0 11 34 36 36 40 44 54 83 90]

arr.sort(kind='heapsort')
print(arr)
#运行结果
[ 0 11 34 36 36 40 44 54 83 90]

arr.sort(kind='stable')
print(arr)
#运行结果
[ 0 11 34 36 36 40 44 54 83 90]

四种排序算法分别是:

  1. quicksort:快速排序
  2. mergesort:归并排序
  3. heapsort:堆排序
  4. stable:冒泡排序

上述排序的结果都一样,quicksort 是默认的排序算法,也是效率最高的算法。

1.2. argsort 函数

除了 sort 函数,还有一个比较常用的是 argsort,它返回的是排序之后的索引。

arr = np.random.randint(0, 100, 10)
print(arr)
#运行结果
[71 59 96 30 71 24 22 60 99 94]

print(arr.argsort())
#运行结果
[6 5 3 1 7 0 4 9 2 8]

argsort 的结果是排序之后的原数组的下标。
比如第一个值 6 表示的是 arr[6],也就是 22

2. 行列排序

当数组是多维的时候,可以按照每个维度来排序。
比如二维数组:

arr = np.random.randint(0, 100, (3, 3))
print(arr)
#运行结果
[[14 18  6]
 [80 85 14]
 [95 24 82]]

arr.sort(axis=0)
print(arr)
#运行结果
[[14 18  6]
 [80 24 14]
 [95 85 82]]

axis=0跨行的意思,也就是按列对数据进行排序。

arr = np.random.randint(0, 100, (3, 3))
print(arr)
#运行结果
[[ 2 22 17]
 [85  6 20]
 [98 97 39]]

arr.sort(axis=1)
print(arr)
#运行结果
[[ 2 17 22]
 [ 6 20 85]
 [39 97 98]]

axis=1跨列的意思,也就是按行对数据进行排序。

注意:这种排序的方式会破坏原有元素之间的行列关系。

3. 部分排序

nunpy的数组还支持部分排序,也就是只针对数组的特定部分排序,不用对整个数组排序。

arr = np.random.randint(0, 100, 10)
print(arr)
#运行结果
[13 94 71  6 47 81 99 12 49 20]

arr.partition(3)
print(arr)
#运行结果
[ 6 13 12 20 94 81 99 71 49 47]

partition(3)表示的把最小的三个数字放在数组前三个,后面的元素就是原先剩下的元素,顺序不管。
放在最前面的三个数是所有元素中最小的三个数,它们的顺序也是不保证的。

多维数组也可以部分排序:

arr = np.random.randint(0, 100, (5, 5))
print(arr)
#运行结果
[[11  8 84 34 99]
 [24 18 69 79 41]
 [ 2 25 91 91 64]
 [64  8 48 86 49]
 [68 62 51 22 85]]

arr.partition(3, axis=0)
print(arr)
#运行结果
[[ 2  8 48 22 49]
 [11  8 51 34 64]
 [24 18 69 79 41]
 [64 25 84 86 85]
 [68 62 91 91 99]]

partition之后,数组的前三行元素就是每列最小的三个数。

arr = np.random.randint(0, 100, (5, 5))
print(arr)
#运行结果
[[76 79 72 91 98]
 [13 58 53 76 63]
 [57 98 16 81 39]
 [48 43 63 98 77]
 [33 71 54 74 68]]

arr.partition(3, axis=1)
print(arr)
#运行结果
[[72 76 79 91 98]
 [13 53 58 63 76]
 [16 39 57 81 98]
 [43 48 63 77 98]
 [33 54 68 71 74]]

partition之后,数组的前三列元素就是每行最小的三个数。

4. 总结回顾

numpy 数组排序提供了一种快速、灵活、可靠的排序方式,可以满足各种排序需求。
numpy的排序针对数组做了更多的优化,排序效率比python内置的排序算法更高。

与【numpy基础】--数组排序相似的内容:

【numpy基础】--数组排序

`numpy` 数组通常是用于数值计算的多维数组,而排序功能可以快速、准确地对数据进行排序,从而得到更加清晰、易于分析的结果。 在数据分析和处理过程中,常常需要对数据进行排序,以便更好地理解和发现其中的规律和趋势。 排序会应用在很多场景中,比如: 1. 数据分类:将数据按照一定的特征进行分类,可以通

NumPy(1)-常用的初始化方法

一、NumPy介绍 NumPy是Python中科学计算的基础包,它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。 功能强大的N维数

NumPy 随机数据分布与 Seaborn 可视化详解

本文介绍了数据分布的概念,它是统计学和数据科学的基础,描述了数据可能出现的频率。NumPy的`random`模块支持生成不同分布的随机数,如`choice`用于离散分布,`randn`和`rand`等用于连续分布。此外,还介绍了数组的随机洗牌和排列。通过Seaborn库,可以创建统计图表,如`dis...

【numpy基础】--数组简介

`NumPy`(Numerical Python)是一个`Python`库,主要用于高效地处理多维数组和矩阵计算。它是科学计算领域中使用最广泛的一个库。 在`NumPy`中,**数组**是最核心的概念,用于存储和操作数据。 `NumPy`数组是一种多维数组对象,可以存储相同类型的元素,它支持高效的数

【numpy基础】--数组过滤

在`numpy`中,数组可以看作是一系列数值的有序集合,可以通过下标访问其中的元素。处理数组的过程中,经常需要用到数组过滤功能。 过滤功能可以在处理数据时非常有用,因为它可以使数据更加干净和可读性更强。例如,在进行数据分析时,通常需要去除异常值,过滤掉不必要的元素可以使数据更加易于分析和处理。 `n

【numpy基础】--数组索引

数组索引是指在`numpy`数组中引用特定元素的方法。`numpy`的数组索引又称为`fancy indexing`,比其他编程语言的索引强大很多。 # 1. 选取数据 numpy的索引除了像其他语言一样选择一个元素,还可以间隔着选取多个元素,也可以用任意的顺序选取元素。 比如一维数组: ```py

【numpy基础】--结构化

目前为止,介绍的`numpy`数组基本都是关于数值的,其实,`numpy`本身就是一个用于数值计算的基础库。 不过,除了数值计算之外,`numpy`也能够支持**结构化数组**。 # 1. 关联不同类型数据 `numpy`的数组为了提高计算性能,要求数组的数据类型要一致。但是现实情况下,我们经常遇到

【numpy基础】--广播计算

`numpy`的广播计算是指在多维数组上进行的一种高效计算方式。 它可以将计算任务分配到每个维度上,并且可以在计算过程中进行数据共享和同步,从而提高计算效率和精度。 广播计算在数值计算、科学计算、机器学习等领域都有广泛的应用。 例如,在数值计算中,广播计算可以用于求解大规模的非线性方程组;在科学计算

学会使用 NumPy:基础、随机、ufunc 和练习测试

NumPy NumPy 是一个用于处理数组的 Python 库。它代表“Numerical Python”。 基本 随机 ufunc 通过测验测试学习 检验您对 NumPy 的掌握程度。 通过练习学习 NumPy 练习 练习: 请插入创建 NumPy 数组的正确方法。 arr = np. ([1,

【numpy基础】--基础操作

`numpy`作为一个强大的数值计算库,提供了对多维数组的很多便捷操作。 承接上一篇数组的创建,本篇主要介绍一些数组的基本操作。 # 1. 子数组 首先介绍获取子数组的方法,提取已有数据的一部分来参与计算是比较常用的功能。 对于一维数组,提取子数组:`arr[start:stop:step]` 1.