- NumPy 教程
- NumPy - 首页
- NumPy - 简介
- NumPy - 环境
- NumPy 数组
- NumPy - Ndarray 对象
- NumPy - 数据类型
- NumPy 创建和操作数组
- NumPy - 数组创建例程
- NumPy - 数组操作
- NumPy - 从现有数据创建数组
- NumPy - 从数值范围创建数组
- NumPy - 遍历数组
- NumPy - 数组重塑
- NumPy - 连接数组
- NumPy - 数组堆叠
- NumPy - 数组分割
- NumPy - 数组扁平化
- NumPy - 数组转置
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高级索引
- NumPy 数组属性和操作
- NumPy - 数组属性
- NumPy - 数组形状
- NumPy - 数组大小
- NumPy - 数组步长
- NumPy - 数组元素大小
- NumPy - 广播
- NumPy - 算术运算
- NumPy - 数组加法
- NumPy - 数组减法
- NumPy - 数组乘法
- NumPy - 数组除法
- NumPy 高级数组操作
- NumPy - 交换数组的轴
- NumPy - 字节交换
- NumPy - 复制和视图
- NumPy - 元素级数组比较
- NumPy - 数组过滤
- NumPy - 连接数组
- NumPy - 排序、搜索和计数函数
- NumPy - 搜索数组
- NumPy - 数组的并集
- NumPy - 查找唯一行
- NumPy - 创建日期时间数组
- NumPy - 二元运算符
- NumPy - 字符串函数
- NumPy - 数学函数
- NumPy - 统计函数
- NumPy - 矩阵库
- NumPy - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O
- NumPy 排序和高级操作
- NumPy - 数组排序
- NumPy - 沿轴排序
- NumPy - 使用花式索引排序
- NumPy - 结构化数组
- NumPy - 创建结构化数组
- NumPy - 操作结构化数组
- NumPy - 字段访问
- NumPy - 记录数组
- Numpy - 加载数组
- Numpy - 保存数组
- NumPy - 将值追加到数组
- NumPy - 交换数组的列
- NumPy - 将轴插入数组
- NumPy 处理缺失数据
- NumPy - 处理缺失数据
- NumPy - 识别缺失值
- NumPy - 删除缺失数据
- NumPy - 估算缺失数据
- NumPy 性能优化
- NumPy - 使用数组进行性能优化
- NumPy - 使用数组进行矢量化
- NumPy - 数组的内存布局
- Numpy 线性代数
- NumPy - 线性代数
- NumPy - 矩阵库
- NumPy - 矩阵加法
- NumPy - 矩阵减法
- NumPy - 矩阵乘法
- NumPy - 元素级矩阵运算
- NumPy - 点积
- NumPy - 矩阵求逆
- NumPy - 行列式计算
- NumPy - 特征值
- NumPy - 特征向量
- NumPy - 奇异值分解
- NumPy - 求解线性方程组
- NumPy - 矩阵范数
- NumPy 元素级矩阵运算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位数
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合运算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 并集
- NumPy - 差集
- NumPy 有用资源
- NumPy 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 排序、搜索和计数函数
NumPy 提供了各种用于对数组中的元素进行排序、搜索和计数的函数。这些函数对于数据操作和分析非常有用。
NumPy 提供了几种排序算法,每种算法都有其自身的特点。以下是三种常见排序算法的比较:
| kind | 速度 | 最坏情况 | 工作空间 | 稳定性 |
|---|---|---|---|---|
| 'quicksort' | 1 | O(n^2) | 0 | 否 |
| 'mergesort' | 2 | O(n*log(n)) | ~n/2 | 是 |
| 'heapsort' | 3 | O(n*log(n)) | 0 | 否 |
numpy.sort() 函数
sort() 函数返回输入数组的排序副本。它可以沿任何指定的轴对数组进行排序,并支持不同的排序算法。以下是语法:
numpy.sort(a, axis, kind, order)
其中,
| 序号 | 参数和描述 |
|---|---|
| 1 | a 要排序的数组 |
| 2 | axis 要排序的数组的轴。如果为 None,则数组将被展平,并在最后一个轴上排序 |
| 3 | kind 默认为 quicksort |
| 4 | order 如果数组包含字段,则要排序的字段的顺序 |
示例
在以下示例中,我们分别使用默认方式和沿特定轴对二维 NumPy 数组进行排序。我们还演示了如何根据特定字段(例如“name”)对结构化数组进行排序:
import numpy as np
# Create a 2D array
a = np.array([[3, 7], [9, 1]])
print("Our array is:",a)
# Default sort
print("Applying sort() function:",np.sort(a))
# Sort along axis 0
print("Sort along axis 0:",np.sort(a, axis=0))
# Order parameter in sort function
dt = np.dtype([('name', 'S10'), ('age', int)])
a = np.array([("raju", 21), ("anil", 25), ("ravi", 17), ("amar", 27)], dtype=dt)
print("Our array is:",a)
print("Order by name:",np.sort(a, order='name'))
它将产生以下输出:
Our array is:
[[3 7]
[9 1]]
Applying sort() function:
[[3 7]
[1 9]]
Sort along axis 0:
[[3 1]
[9 7]]
Our array is:
[('raju', 21) ('anil', 25) ('ravi', 17) ('amar', 27)]
Order by name:
[('amar', 27) ('anil', 25) ('raju', 21) ('ravi', 17)]
numpy.argsort() 函数
numpy.argsort() 函数对输入数组沿给定轴并使用指定的排序类型进行间接排序,并返回数据索引的数组。此索引数组用于构造排序数组。
示例
在此示例中,我们使用 argsort() 函数检索索引,即排序元素在原始数组中的位置。使用这些索引,您可以重建排序数组:
import numpy as np
# Create an array
x = np.array([3, 1, 2])
print("Our array is:",x)
# Get indices that would sort the array
y = np.argsort(x)
print("Applying argsort() to x:",y)
# Reconstruct the sorted array using the indices
print("Reconstruct original array in sorted order:",x[y])
# Reconstruct the original array using a loop
print("Reconstruct the original array using loop:")
for i in y:
print(x[i], end=' ')
它将产生以下输出:
Our array is: [3 1 2] Applying argsort() to x: [1 2 0] Reconstruct original array in sorted order: [1 2 3] Reconstruct the original array using loop: 1 2 3
numpy.lexsort() 函数
NumPy lexort() 函数使用一系列键执行间接排序。键可以看作电子表格中的列。该函数返回一个索引数组,可以使用它来获取排序数据。请注意,最后一个键恰好是排序的主键。
示例
在此示例中,我们使用 np.lexsort() 函数根据多个键对数据集进行排序,其中最后一个键“nm”是主要排序标准。然后使用排序索引通过组合名称和相应的字段来显示排序数据:
import numpy as np
# Define keys
nm = ('raju', 'anil', 'ravi', 'amar')
dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
# Get indices for sorted order
ind = np.lexsort((dv, nm))
print("Applying lexsort() function:",ind)
# Use indices to get sorted data
print("Use this index to get sorted data:",[nm[i] + ", " + dv[i] for i in ind])
它将产生以下输出:
Applying lexsort() function: [3 1 0 2] Use this index to get sorted data: ['amar, f.y.', 'anil, s.y.', 'raju, f.y.', 'ravi, s.y.']
NumPy 提供了用于查找最大值、最小值和非零元素以及满足条件的元素的索引的函数。
numpy.argmax() 和 numpy.argmin() 函数
NumPy argmax() 和 argmin() 函数分别返回沿给定轴的最大和最小元素的索引。
示例
在此示例中,我们使用 np.argmax() 和 np.argmin() 函数查找二维数组中最大值和最小值的索引,包括展平数组和沿特定轴的情况:
import numpy as np
# Create a 2D array
a = np.array([[30, 40, 70], [80, 20, 10], [50, 90, 60]])
print("Our array is:",a)
# Apply argmax() function
print("Applying argmax() function:",np.argmax(a))
# Index of maximum number in flattened array
print("Index of maximum number in flattened array:",a.flatten())
# Array containing indices of maximum along axis 0
print("Array containing indices of maximum along axis 0:")
maxindex = np.argmax(a, axis=0)
print(maxindex)
# Array containing indices of maximum along axis 1
print("Array containing indices of maximum along axis 1:")
maxindex = np.argmax(a, axis=1)
print(maxindex)
# Apply argmin() function
print("Applying argmin() function:")
minindex = np.argmin(a)
print(minindex)
# Flattened array
print("Flattened array:",a.flatten()[minindex])
# Flattened array along axis 0
print("Flattened array along axis 0:")
minindex = np.argmin(a, axis=0)
print(minindex)
# Flattened array along axis 1
print("Flattened array along axis 1:")
minindex = np.argmin(a, axis=1)
print(minindex)
输出包括这些极值的索引,演示了如何在数组中访问和解释这些位置:
Our array is: [[30 40 70] [80 20 10] [50 90 60]] Applying argmax() function: 7 Index of maximum number in flattened array [30 40 70 80 20 10 50 90 60] Array containing indices of maximum along axis 0: [1 2 0] Array containing indices of maximum along axis 1: [2 0 1] Applying argmin() function: 5 Flattened array: 10 Flattened array along axis 0: [0 1 1] Flattened array along axis 1: [0 2 0]
numpy.nonzero() 函数
numpy.nonzero() 函数返回输入数组中非零元素的索引。
示例
在下面的示例中,我们使用 nonzero() 函数检索数组“a”中非零元素的索引:
import numpy as np
a = np.array([[30,40,0],[0,20,10],[50,0,60]])
print ('Our array is:',a)
print ('Applying nonzero() function:',np.nonzero (a))
它将产生以下输出:
Our array is: [[30 40 0] [ 0 20 10] [50 0 60]] Applying nonzero() function: (array([0, 0, 1, 1, 2, 2]), array([0, 1, 1, 2, 0, 2]))
numpy.where() 函数
where() 函数返回输入数组中满足给定条件的元素的索引,如下面的示例所示:
import numpy as np
x = np.arange(9.).reshape(3, 3)
print ('Our array is:',x)
print ('Indices of elements > 3')
y = np.where(x > 3)
print (y)
print ('Use these indices to get elements satisfying the condition',x[y])
它将产生以下输出:
Our array is: [[ 0. 1. 2.] [ 3. 4. 5.] [ 6. 7. 8.]] Indices of elements > 3 (array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2])) Use these indices to get elements satisfying the condition [ 4. 5. 6. 7. 8.]
numpy.extract() 函数
extract() 函数返回满足任何条件的元素,如下面的示例所示:
import numpy as np
x = np.arange(9.).reshape(3, 3)
print ('Our array is:',x)
# define a condition
condition = np.mod(x,2) == 0
print ('Element-wise value of condition',condition)
print ('Extract elements using condition',np.extract(condition, x))
它将产生以下输出:
Our array is: [[ 0. 1. 2.] [ 3. 4. 5.] [ 6. 7. 8.]] Element-wise value of condition [[ True False True] [False True False] [ True False True]] Extract elements using condition [ 0. 2. 4. 6. 8.]