Python 教程之 Numpy(11)—— 排序、搜索和计数

简介: Python 教程之 Numpy(11)—— 排序、搜索和计数

排序

排序是指以特定格式排列数据。排序算法指定以特定顺序排列数据的方式。最常见的顺序是数字或字典顺序。在 Numpy 中,我们可以使用库中提供的各种函数(如 sort、lexsort、argsort 等)执行各种排序操作。

numpy.sort(): 此函数返回数组的排序副本。

# 导入库
import numpy as np
# 沿第一轴排序
a = np.array([[12, 15], [10, 1]])
arr1 = np.sort(a, axis = 0)        
print ("Along first axis : \n", arr1)        
# 沿最后一个轴排序
a = np.array([[10, 15], [12, 1]])
arr2 = np.sort(a, axis = -1)        
print ("\nAlong first axis : \n", arr2)
a = np.array([[12, 15], [10, 1]])
arr1 = np.sort(a, axis = None)        
print ("\nAlong none axis : \n", arr1)

输出 :

Along first axis : 
 [[10  1]
 [12 15]]
Along first axis : 
 [[10 15]
 [ 1 12]]
Along none axis : 
 [ 1 10 12 15]

numpy.argsort(): 此函数返回将对数组进行排序的索引。

# 演示 numpy.argsort 工作的 Python 代码
import numpy as np
# 已创建 Numpy 数组
a = np.array([9, 3, 1, 7, 4, 3, 6])
# 未排序的数组打印
print('Original array:\n', a)
# 排序数组索引
b = np.argsort(a)
print('Sorted indices of original array->', b)
# 要使用排序索引获取排序数组 c 是由与 b 相同的 len 创建的临时数组
c = np.zeros(len(b), dtype = int)
for i in range(0, len(b)):
    c[i]= a[b[i]]
print('Sorted array->', c)

在 IDE 上运行

输出:

Original array:
 [9 3 1 7 4 3 6]
Sorted indices of original array-> [2 1 5 4 6 3 0]
Sorted array-> [1 3 3 4 6 7 9]

numpy.lexsort(): 此函数使用一系列键返回间接稳定排序。

# 演示 numpy.lexsort() 工作的 Python 代码
import numpy as np
# numpy数组创建第一列
a = np.array([9, 3, 1, 3, 4, 3, 6])
# 第二栏
b = np.array([4, 6, 9, 2, 1, 8, 7]) 
print('column a, column b')
for (i, j) in zip(a, b):
    print(i, ' ', j)
# 按 a 然后按 b 排序
ind = np.lexsort((b, a)) 
print('Sorted indices->', ind)

输出 :

column a, column b
9   4
3   6
1   9
3   2
4   1
3   8
6   7
Sorted indices-> [2 3 1 5 4 6 0]

image.png

搜索

搜索是一种操作或技术,可帮助查找给定元素或值在列表中的位置。根据是否找到正在搜索的元素,任何搜索都被称为成功或不成功。在 Numpy 中,我们可以使用库中提供的各种函数(如 argmax、argmin、nanaargmax 等)执行各种搜索操作。

numpy.argmax(): 此函数返回特定轴中数组的最大元素的索引。

# 说明 argmax() 工作的 Python 程序
import numpy as geek 
# 处理二维数组
array = geek.arange(12).reshape(3, 4)
print("INPUT ARRAY : \n", array)
# 没有提到轴,所以适用于整个阵列
print("\nMax element : ", geek.argmax(array))
# 根据索引返回最大元素的索引
print(("\nIndices of Max element : "
      , geek.argmax(array, axis=0)))
print(("\nIndices of Max element : "
      , geek.argmax(array, axis=1)))

输出 :

INPUT ARRAY : 
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
Max element :  11
Indices of Max element :  [2 2 2 2]
Indices of Max element :  [3 3 3]

 

numpy.nanargmax(): 此函数返回忽略 NaN 的特定轴中数组的最大元素的索引。如果切片仅包含 NaN 和 Infs,则结果不可信。

# 说明 nanargmax() 工作的 Python 程序
import numpy as geek 
# 处理一维数组
array = [geek.nan, 4, 2, 3, 1]
print("INPUT ARRAY 1 : \n", array)
array2 = geek.array([[geek.nan, 4], [1, 3]])
# 根据忽略 NaN 的索引返回最大元素的索引
print(("\nIndices of max in array1 : "
       , geek.nanargmax(array)))
# 处理二维数组
print("\nINPUT ARRAY 2 : \n", array2)
print(("\nIndices of max in array2 : "
      , geek.nanargmax(array2)))
print(("\nIndices at axis 1 of array2 : "
      , geek.nanargmax(array2, axis = 1)))

输出 :

INPUT ARRAY 1 : 
 [nan, 4, 2, 3, 1]
Indices of max in array1 :  1
INPUT ARRAY 2 : 
 [[ nan   4.]
 [  1.   3.]]
Indices of max in array2 :  1
Indices at axis 1 of array2 :  [1 1]

numpy.argmin(): 此函数返回沿轴的最小值的索引。

# 说明 argmin() 工作的 Python 程序
import numpy as geek 
# 处理一维数组
array = geek.arange(8)
print("INPUT ARRAY : \n", array)
# 根据索引返回 min 元素的索引
print("\nIndices of min element : ", geek.argmin(array, axis=0))

在 IDE 上运行

输出 :

INPUT ARRAY : 
 [0 1 2 3 4 5 6 7]
Indices of min element :  0

image.png

Counting

numpy.count_nonzero() :计算数组中非零值的数量。

# 说明 count_nonzero() 工作的 Python 程序
import numpy as np
# 计算多个非零值
a = np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]])
b = np.count_nonzero(([[0,1,7,0,0],[3,0,0,2,19]]
                     , axis=0))
print("Number of nonzero values is :",a)
print("Number of nonzero values is :",b)

在 IDE 上运行

输出 :

Number of nonzero values is : 5
Number of nonzero values is : [1, 1, 1, 1, 1]


目录
相关文章
|
7天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
14 1
|
9天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 插值 2
SciPy插值教程:介绍插值概念及其在数值分析中的应用,特别是在处理数据缺失时的插补和平滑数据集。SciPy的`scipy.interpolate`模块提供了强大的插值功能,如一维插值和样条插值。通过`UnivariateSpline()`函数,可以轻松实现单变量插值,示例代码展示了如何对非线性点进行插值计算。
12 3
|
12天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 4
本教程介绍了SciPy的空间数据处理功能,主要通过scipy.spatial模块实现。内容涵盖空间数据的基本概念、距离矩阵的定义及其在生物信息学中的应用,以及如何计算欧几里得距离。示例代码展示了如何使用SciPy计算两点间的欧几里得距离。
28 5
|
11天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 空间数据 6
本教程介绍了SciPy处理空间数据的方法,包括使用scipy.spatial模块进行点位置判断、最近点计算等内容。还详细讲解了距离矩阵的概念及其应用,如在生物信息学中表示蛋白质结构等。最后,通过实例演示了如何计算两点间的余弦距离。
23 3
|
10天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
19 1
|
13天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
33 2
|
14天前
|
Python
SciPy 教程 之 SciPy 图结构 7
《SciPy 教程 之 SciPy 图结构 7》介绍了 SciPy 中处理图结构的方法。图是由节点和边组成的集合,用于表示对象及其之间的关系。scipy.sparse.csgraph 模块提供了多种图处理功能,如 `breadth_first_order()` 方法可按广度优先顺序遍历图。示例代码展示了如何使用该方法从给定的邻接矩阵中获取广度优先遍历的顺序。
25 2
|
15天前
|
算法 Python
SciPy 教程 之 SciPy 图结构 5
SciPy 图结构教程,介绍图的基本概念和SciPy中处理图结构的模块scipy.sparse.csgraph。重点讲解贝尔曼-福特算法,用于求解任意两点间最短路径,支持有向图和负权边。通过示例演示如何使用bellman_ford()方法计算最短路径。
27 3
|
15天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
32 1
|
8天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 插值 3
本教程介绍了SciPy中的插值方法,包括什么是插值及其在数据处理和机器学习中的应用。通过 `scipy.interpolate` 模块,特别是 `Rbf()` 函数,展示了如何实现径向基函数插值,以平滑数据集中的离散点。示例代码演示了如何使用 `Rbf()` 函数进行插值计算。
16 0