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]


目录
相关文章
|
6月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
495 0
|
6月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
563 1
|
6月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
356 0
|
8月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
846 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
8月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
677 0
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
866 10
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
471 2
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
980 5
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
485 1
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
412 3

热门文章

最新文章

推荐镜像

更多