NumPy学习9
今天学习了NumPy排序和搜索功能
17, NumPy排序和搜索功能
numpy_test9.py :
import numpy as np '''
17, NumPy排序和搜索功能 NumPy 提供了多种排序函数, 这些排序函数可以实现不同的排序算法。 排序算法特征主要体现在以下四个方面:执行速度,最坏情况下的复杂度,所需的工作空间以及算法的稳定性。下表列举了三种排序算法:
NumPy排序算法
种类 速度 最坏复杂度 工作空间 稳定性
quicksort(快速排序) 1 O(n^2) 0 不稳定
mergesort(归并排序) 2 O(n * log(n)) ~n/2 稳定
heapsort(堆排序) 3 O(n * log(n)) 0 不稳定
''' '''
(1) numpy.sort()
numpy.sort() 对输入数组执行排序,并返回一个数组副本。它具有以下参数:
numpy.sort(a, axis, kind, order) 参数说明:
a:要排序的数组;
axis:沿着指定轴进行排序,如果没有指定 axis,默认在最后一个轴上排序,若 axis=0 表示按列排序,axis=1 表示按行排序;
kind:默认为 quicksort(快速排序);
order:若数组设置了字段,则 order 表示要排序的字段。
'''
print("----17, NumPy排序和搜索功能----")
print("----(1) numpy.sort()----")
arr1 = np.array([[3, 7, 12], [9, 1, 15]])
print('arr1 : ', arr1)
# 调用sort()函数
print('np.sort(arr1) : ', np.sort(arr1))
# 按列排序:
print('np.sort(arr1, axis=0) : ', np.sort(arr1, axis=0))
# 设置在sort函数中排序字段
datatype = np.dtype([('name', 'S10'),('age', int)])
arr2 = np.array([("zhangsan", 21), ("lisi", 25), ("wanger", 17), ("chenjiu", 27)], dtype=datatype)
# 打印arr2数组
print('arr2 : ', arr2)
# 按 age 字段排序
print("np.sort(arr2, order='age') : ", np.sort(arr2, order='age'))
'''
arr1 : [[ 3 7 12]
[ 9 1 15]]
np.sort(arr1) : [[ 3 7 12]
[ 1 9 15]]
np.sort(arr1, axis=0) : [[ 3 1 12]
[ 9 7 15]]
arr2 : [(b'zhangsan', 21) (b'lisi', 25) (b'wanger', 17) (b'chenjiu', 27)]
np.sort(arr2, order='age') : [(b'wanger', 17) (b'zhangsan', 21) (b'lisi', 25) (b'chenjiu', 27)]
''' '''
(2) numpy.argsort()
argsort() 沿着指定的轴,对输入数组的元素值进行排序,并返回排序后的元素索引数组。
'''
print("----(2) numpy.argsort()----")
arr3 = np.array([78, 24, 85, 32])
print('arr3 : ', arr3)
sort_ind = np.argsort(arr3)
print("打印排序元素索引值:", sort_ind)
# 使用索引数组对原数组排序
sort_a = arr3[sort_ind]
print("打印排序数组")
for i in sort_ind:
print(arr3[i], end=" ")
print("\n-------------------\n")
'''
arr3 : [78 24 85 32]
打印排序元素索引值: [1 3 0 2]
打印排序数组
24 32 78 85
''' '''
(3) numpy.lexsort()
numpy.lexsort() 按键序列对数组进行排序,它返回一个已排序的索引数组,类似于 numpy.argsort()。
'''
print("----(3) numpy.lexsort()----")
a = np.array(['a', 'b', 'c', 'd', 'e'])
b = np.array([23, 40, 120, 25, 123])
print('a : ', a)
print('b : ', b)
ind = np.lexsort((a, b))
# 打印排序元素的索引数组
print('ind : ', ind)
# 使用索引数组对数组进行排序
for i in ind:
print(a[i], b[i])
print("\n-------------------\n")
'''
a : ['a' 'b' 'c' 'd' 'e']
b : [ 23 40 120 25 123]
打印排序元素的索引数组:
ind : [0 3 1 2 4]
使用索引数组对原数组进行排序:
a 23
d 25
b 40
c 120
e 123
''' '''
(4) numpy.nonzero()
该函数从数组中查找非零元素的索引位置。
'''
print("----(4) numpy.nonzero()----")
arr4 = np.array([14, 50, 260, 0, 32, 231])
print('arr4 : ', arr4)
print("打印非0元素的索引位置:", arr4.nonzero())
'''
arr4 : [ 14 50 260 0 32 231]
打印非0元素的索引位置: (array([0, 1, 2, 4, 5], dtype=int64),)
''' '''
(5) numpy.where()
numpy.where() 的返回值是满足了给定条件的元素索引值。
'''
print("----(5) numpy.where()----")
arr5 = np.array([12, 90, 380, 12, 211])
print('arr5 : ', arr5)
print('np.where(arr5 > 12) : ', np.where(arr5 > 12))
print('np.where(arr5 < 100) : ', np.where(arr5 < 100))
'''
arr5 : [ 12 90 380 12 211]
np.where(arr5 > 12) : (array([1, 2, 4], dtype=int64),)
np.where(arr5 < 100) : (array([0, 1, 3], dtype=int64),)
''' '''
(6) numpy.extract()
该函数的返回值是满足了给定条件的元素值.
'''
print("----(6) numpy.extract()----")
arr6 = np.array([16, 32, 25, 13, 21])
print('arr6 : ', arr6)
# 设置条件选择偶数元素
condition = np.mod(arr6,2) == 0
# 输出布尔值数组
print('condition : ', condition)
# 按condition提取满足条件的元素值
print('np.extract(condition, arr6) : ', np.extract(condition, arr6))
'''
arr6 : [16 32 25 13 21]
condition : [ True True False False False]
np.extract(condition, arr6) : [16 32]
''' '''
(7) numpy.argmax()
该函数返回最大值的的索引.
'''
print("----(7) numpy.argmax()----")
arr7 = np.array([[3, 4, 7], [8, 2, 1], [5, 9, 6]])
print('arr7 : ', arr7)
# argmax() 函数
print('np.argmax(arr7) : ', np.argmax(arr7))
# 将数组以一维展开
print('arr7.flatten() : ', arr7.flatten())
# 沿轴 0 的最大值索引:
maxindex0 = np.argmax(arr7, axis=0)
print('maxindex0 : ', maxindex0)
# 沿轴 1 的最大值索引
maxindex1 = np.argmax(arr7, axis=1)
print('maxindex1 : ', maxindex1)
'''
arr7 : [[3 4 7]
[8 2 1]
[5 9 6]]
np.argmax(arr7) : 7
arr7.flatten() : [3 4 7 8 2 1 5 9 6]
maxindex0 : [1 2 0]
maxindex1 : [2 0 1]
''' '''
(8) numpy.argmin()
该函数返回最小值的索引。
'''
print("----(8) numpy.argmin()----")
arr8 = np.array([[3, 4, 8], [4, 2, 1], [7, 9, 6]])
print('arr8 : ', arr8)
# 调用 argmin()函数
minindex = np.argmin(arr8)
print('minindex : ', minindex)
# 展开数组中的最小值:
print('arr8.flatten() : ', arr8.flatten())
print('arr8.flatten()[minindex] : ', arr8.flatten()[minindex])
# 沿轴 0 的最小值索引:
maxindex0 = np.argmin(arr8, axis=0)
print('maxindex0 : ', maxindex0)
# 沿轴 1 的最小值索引:
minindex1 = np.argmin(arr8, axis=1)
print('minindex1 : ', minindex1)
'''
arr8 : [[3 4 8]
[4 2 1]
[7 9 6]]
minindex : 5
arr8.flatten() : [3 4 8 4 2 1 7 9 6]
arr8.flatten()[minindex] : 1
maxindex0 : [0 1 1]
minindex1 : [0 2 2]
'''
NumPy学习9的更多相关文章
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- NumPy学习笔记 一
NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- 数据分析之Pandas和Numpy学习笔记(持续更新)<1>
pandas and numpy notebook 最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...
- NumPy学习(索引和切片,合并,分割,copy与deep copy)
NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...
- NumPy学习(让数据处理变简单)
NumPy学习(一) NumPy数组创建 NumPy数组属性 NumPy数学算术与算数运算 NumPy数组创建 NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型. 它描述相同 ...
- numpy 学习笔记
numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...
- numpy 学习总结
numpy 学习总结 作者:csj更新时间:01.09 email:59888745@qq.com 说明:因内容较多,会不断更新 xxx学习总结: 回主目录:2017 年学习记录和总结 #生成数组/使 ...
- (转)Python数据分析之numpy学习
原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...
- Numpy学习1
NumPy学习(1) 参考资料: http://www.cnblogs.com/zhanghaohong/p/4854858.html http://linusp.github.io/2016/02/ ...
随机推荐
- VS2010/MFC 获取当前程序路径的方法
第一种方法 DWORD GetCurrentDirectory( DWORD nBufferLength, // size, in characters, of directory buffer LP ...
- 开源轻量级 IM 框架 MobileIMSDK v6.1.2 发布!
一.更新内容简介 本次更新为次要版本更新,进行了若干优化(更新历史详见:码云 Release Nodes).可能是市面上唯一同时支持 UDP+TCP+WebSocket 三种协议的同类开源IM框架. ...
- JMeter 采样器超详细教程
宝子们,今天咱就来好好唠唠 JMeter 里那些厉害的采样器,让你轻松拿捏性能测试和接口测试! 一.采样器大集合 先给宝子们来个采样器的 "全家福",让你们心里有个底: HTTP ...
- Python学习(六)——配套《PyTorch深度学习实战》
1. NumPy介绍 这张图片介绍了Python中两个非常重要的科学计算库:NumPy和SciPy,以及它们的核心功能和特性. NumPy NumPy(Numerical Python)是一个开源的P ...
- Swagger UI、RESTful简介
Swagger UI 简介 Swagger UI允许任何人(无论您是开发团队还是最终用户)都可以可视化API资源并与之交互,而无需任何实现逻辑.它是根据您的OpenAPI(以前称为Swagger)规范 ...
- 回顾 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报
前言 今天咱们一起来回顾一下 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报,看看是否有适合你学习和参考的项目和框架. 简报初衷 公众号每月定期推广和分享的C#/.NE ...
- Angular-教程
https://www.runoob.com/angularjs/angularjs-tutorial.html https://www.runoob.com/angularjs2/angularjs ...
- WebSocket,IsWebSocketRequest与AspNetWebSocketContext
asp.net新建一个服务端程序,用来处理链接服务端: 1,新建一个处理程序 .ashx using System; using System.Collections.Generic; using S ...
- ReentrantLock实现机制
掌握Reentrantlock 具体结构 下文Reentrantlock简称RL,阅读之前强烈建议读一下AQS源码解析: https://www.cnblogs.com/seamount3/p/186 ...
- VS2022编译项目出现““csc.exe”已退出,代码为 -1073741819”的错误解决办法
1.问题描述 编译出错如下图所示: 2.解决办法 在NuGet包中输入Microsoft.Net.Compilers,安装该包,安装完后重新生成就不报错了,如下图所示: