《Python数据分析基础教程:NumPy学习指南(第2版)》笔记15:第七章 专用函数1——排序

Python NumPy 的学习笔记 阅读详情

第七章 专用函数

本章主要介绍金融计算或信号处理方面的Numpy函数。

7.1 排序

NumPy提供了多种排序函数,如下所示:

  • sort函数返回排序后的数组;
  • lexsort函数根据键值的字典序进行排序;
  • argsort函数返回输入数组排序后的下标;
  • ndarray类的sort方法可对数组进行原位排序;
  • msort函数沿着第一个轴排序;
  • sort_complex函数对复数按照先实部后虚部的顺序进行排序。
    在上面的列表中, argsort和sort函数可用来对NumPy数组类型进行排序。

7.2 动手实践:按字典序排序

NumPy中的lexsort函数返回输入数组按字典序排序后的下标。我们需要给lexsort函数提供排序所依据的键值数组或元组。步骤如下。

  • (1) 回顾一下第3章中我们使用的AAPL股价数据,现在我们要将这些很久以前的数据用在完全不同的地方。我们将载入收盘价和日期数据。是的,处理日期总是很复杂,我们为其准备了专门的转换函数。

    import numpy as np
    import datetime
    
    def datestr2num(s):
        return datetime.datetime.strptime(s.decode('ascii'), "%d-%m-%Y").toordinal()
    
    dates,closes=np.loadtxt('AAPL.csv', delimiter=',', usecols=(1, 6), converters={1:datestr2num}, unpack=True)
    
  • (2) 使用lexsort函数排序。数据本身已经按照日期排序,不过我们现在优先按照收盘价排序:

    indices = np.lexsort((dates, closes))
    
    print( "Indices", indices)
    print( ["%s %s" % (datetime.date.fromordinal(int(dates[i])),  closes[i]) for i in indices])
    

    输出结果如下:

    Indices [ 0 16  1 17 18  4  3  2  5 28 19 21 15  6 29 22 27 20  9  7 25 26 10  8
     14 11 23 12 24 13]
    ['2011-01-28 336.1', '2011-02-22 338.61', '2011-01-31 339.32', '2011-02-23 342.62', '2011-02-24 342.88', '2011-02-03 343.44', '2011-02-02 344.32', '2011-02-01 345.03', '2011-02-04 346.5', '2011-03-10 346.67', '2011-02-25 348.16', '2011-03-01 349.31', '2011-02-18 350.56', '2011-02-07 351.88', '2011-03-11 351.99', '2011-03-02 352.12', '2011-03-09 352.47', '2011-02-28 353.21', '2011-02-10 354.54', '2011-02-08 355.2', '2011-03-07 355.36', '2011-03-08 355.76', '2011-02-11 356.85', '2011-02-09 358.16', '2011-02-17 358.3', '2011-02-14 359.18', '2011-03-03 359.56', '2011-02-15 359.9', '2011-03-04 360.0', '2011-02-16 363.13']
    

案例完整代码如下:

import numpy as np
import datetime

def datestr2num(s):
    return datetime.datetime.strptime(s.decode('ascii'), "%d-%m-%Y").toordinal()

dates,closes=np.loadtxt('AAPL.csv', delimiter=',', usecols=(1, 6), converters={1:datestr2num}, unpack=True)
indices = np.lexsort((dates, closes))

print( "Indices", indices)
print( ["%s %s" % (datetime.date.fromordinal(int(dates[i])),  closes[i]) for i in indices])

7.3 复数

复数包含实数部分和虚数部分。如同在前面的章节中提到的, NumPy中有专门的复数类型,使用两个浮点数来表示复数。这些复数可以使用NumPy的sort_complex函数进行排序。该函数按照先实部后虚部的顺序排序。

7.4 动手实践:对复数进行排序

我们将创建一个复数数组并进行排序,步骤如下。

  • (1) 生成5个随机数作为实部, 5个随机数作为虚部。设置随机数种子为42:

    import numpy as np
    
    np.random.seed(42)
    complex_numbers = np.random.random(5) + 1j * np.random.random(5)
    print("Complex numbers\n", complex_numbers)
    

    输出为:

    Complex numbers
     [0.37454012+0.15599452j 0.95071431+0.05808361j 0.73199394+0.86617615j
     0.59865848+0.60111501j 0.15601864+0.70807258j]
    
  • (2) 调用sort_complex函数对上面生成的复数进行排序:

    print("Sorted\n", np.sort_complex(complex_numbers))
    

    排序后的结果如下:

    Sorted
     [0.15601864+0.70807258j 0.37454012+0.15599452j 0.59865848+0.60111501j
     0.73199394+0.86617615j 0.95071431+0.05808361j]
    

案例完整代码如下:

import numpy as np

np.random.seed(42)
complex_numbers = np.random.random(5) + 1j * np.random.random(5)
print("Complex numbers\n", complex_numbers)
print("Sorted\n", np.sort_complex(complex_numbers))

7.5 搜索

NumPy中有多个函数可以在数组中进行搜索,如下所示。

  • argmax函数返回数组中最大值对应的下标。

    >>> a = np.array([2, 4, 8])
    >>> np.argmax(a)
    2
    
  • nanargmax函数提供相同的功能,但忽略NaN值。

    >>> b = np.array([np.nan, 2, 4])
    >>> np.nanargmax(b)
    2
    
  • argmin和nanargmin函数的功能类似,只不过换成了最小值。

  • argwhere函数根据条件搜索非零的元素,并分组返回对应的下标。

    >>> a = np.array([2, 4, 8])
    >>> np.argwhere(a <= 4)
    array([[0],
    [1]])
    
  • searchsorted函数可以为指定的插入值寻找维持数组排序的索引位置。该函数使用二分搜索算法,计算复杂度为O(log(n))。

  • extract函数返回满足指定条件的数组元素。

7.6 动手实践:使用searchsorted函数

searchsorted函数为指定的插入值返回一个在有序数组中的索引位置,从这个位置插入可以保持数组的有序性。下面的例子可以解释得更清楚。请完成如下步骤。

  • (1) 我们需要一个排序后的数组。使用arange函数创建一个升序排列的数组:

    import numpy as np
    
    a = np.arange(5)
    
  • (2) 现在,我们来调用searchsorted函数:

    indices = np.searchsorted(a, [-2, 7])
    print("Indices", indices)
    

    下面的索引即可以维持数组排序的插入位置:

    Indices [0 5]
    
  • (3) 使用insert函数构建完整的数组:

    print("The full array", np.insert(a, indices, [-2, 7]))
    

    结果如下:

    The full array [-2 0 1 2 3 4 7]
    

案例完整代码如下:

import numpy as np

a = np.arange(5)
indices = np.searchsorted(a, [-2, 7])
print("Indices", indices)

print("The full array", np.insert(a, indices, [-2, 7]))

7.7 数组元素抽取

NumPy的**extract函数可以根据某个条件从数组中抽取元素**。该函数和我们在第3章中遇到过的where函数相似。 nonzero函数专门用来抽取非零的数组元素。

7.8 动手实践:从数组中抽取元素

我们要从一个数组中抽取偶数元素,步骤如下。

  • (1) 使用arange函数创建数组:

    import numpy as np
    
    a = np.arange(7)
    
  • (2) 生成选择偶数元素的条件变量:

    condition = (a % 2) == 0
    
  • (3) 使用extract函数基于生成的条件从数组中抽取元素:

    print("Even numbers", np.extract(condition, a))
    

    输出数组中的偶数元素,如下所示:

    Even numbers [0 2 4 6]
    
  • (4) 使用nonzero函数抽取数组中的非零元素:

    print("Non zero", np.nonzero(a))
    

    输出结果如下:

    Non zero (array([1, 2, 3, 4, 5, 6]),)
    

案例完整代码如下:

import numpy as np

a = np.arange(7)
condition = (a % 2) == 0
print("Even numbers", np.extract(condition, a))
print("Non zero", np.nonzero(a))
Python数据分析教程:Numpy 中不得不知的4个重要函数 Numpy 功能十分强大,很多我们想要的复杂操作都有实现。今天分享几个数据分析中经常需要用到的重要函数。掌握这些函数可以帮助我们保持代码整洁并且避免重复造轮子。 准备工作 导入numpy import numpy as np 示例数据 本文以二分类任务为例,通常我们的model会输出预测的概率,得到概率后需要进行后续的处理,比如: •根据阈值,将概率大于某个阈值的label... 阅读详情

相关推荐

IPD的分析工具与模型(十六)CBB公用基础模块管理实现资源共享,缩短开发周期

CBB流程的开发环节,基于CBB规划中所识别和设计的CBB,进行CBB的详细设计(包括参数设计和接口设计),并最终实现CBB的落地开发。作为特殊类型的技术构件,CBB的开发流程,可沿用技术开发中的构件开发流程,具体包括概念、计划、开发和迁移等步骤,具体可参见前文的相关介绍。有了蓝图与架构设计,落地实施是关键攻坚。具体工作内容包括:具体工作内容包括:a. 以相似性、聚类、相对独行性、可组合、可扩展性、可维护性等原则为指导,按照产品的功能特征和业务类型,聚焦零散的功能点,形成功能模块,实现产品功能模块的划分;

corgi2020的博客 2000

Python Numpy中返回下标操作函数-节约时间的利器

如果觉得Python慢,那么首先应该想到是不是没有用对。 Numpy是Python中自带的一个数值计算库,包含了大量数值计算的常用方法。其底层大量使用C/C++(超过50%的代码量),矩阵计算调用LAPACK库(Fortran),同时在大量代码优化的层面做了工作,使得其内置方法速度奇快。 Numpy的设计也颇具人性化, 有许多具有特色又好用的方法可供使用。其中以arg开头函数就是专门为返回下标(集)而设计的,总共有5个这样的函数,它们简单易用,在许多问题里可以将程序极度简化,从而提高我们的工作效率。 1.

半个冯博士 1万+

家用电器维修必备:手把手教你用双向可控硅改造单相电机调速(附电路图)

本文提供了一份详细的家用电器维修指南,手把手教你如何利用双向可控硅为核心元件,为单相交流电机(如风扇、排气扇)实现平滑的无级调速改造。内容涵盖核心原理、安全须知、元件选型(如BT136、DB3)、电路图解析、分步搭建教程以及常见故障排查方法,旨在帮助维修爱好者和DIY用户安全、成功地完成这一实用且富有成就感的项目。

read5的博客 836

Javascript中Array对象的sort()方法初探

Array的sort()方法 参照W3School的说明: 不提供排序函数时,按照字母表(字符编码)顺序排列 不提供排序函数 1 <script type="text/javascript"> 2 3 var arr = new Array(6) 4 arr[0] = "George" 5 arr[1] = "John" 6 arr[2] ...

163

5种超实用方法:快速获取Windows文件夹下所有文件名(含CMD/PowerShell脚本)

本文详细介绍了5种快速获取Windows文件夹下所有文件名的实用方法,包括图形界面操作、Excel数据导入、CMD命令和PowerShell脚本。特别提供了高效的CMD和PowerShell脚本示例,帮助用户轻松实现文件名的批量获取与管理,大幅提升工作效率。

opencv7vision的博客 449

【安徽理工大学】一文带你高分拿下计算机考研复试(85+的秘密)

一文带你高分拿下安徽理工大学计算机考研复试(85+的秘密)

猫天意的博客 1523

Python之numpy数组篇(下)

数组排序,内积运算,访问数组中的元素,数组对函数运算的支持,改变数组形状,数组堆叠与合并

申小兮和林小兮的博客宝 2049

机器学习笔记 - 基于深度学习(HomographyNet)的图像单应性估计

论文提出了一个深度卷积神经网络来估计一对图像之间的相对单应性。我们的前馈网络有10层,以两个堆叠的灰度图像作为输入,并产生一个8自由度的单应性,可用于映射从第一个图像到第二个图像的像素。我们为HomographyNet提出了两种卷积神经网络架构一个直接估计实值单应性参数的回归网络,以及一个在量化单应性上产生分布的分类网络。我们使用4点单应性参数化,将一个图像的四个角映射到第二个图像。我们的网络使用扭曲的MS-COCO图像以端到端的方式进行训练。论文的贡献如下。........................

学以致用 知行合一 3083

java数据的排序方法

代码: public class SortTest { public static void printValue(int[] number) {// 打印数组元素的内容 if (number == null) {// 如果该数组是空的则返回,不执行下面的语句。 return; } for (int i = 0; i System.out.print(number[i] + " "

dreamHan2013的博客 547

116、影像质量主观评价方法论:标准场景与专家判读

本文探讨了影像质量主观评价的方法论,强调标准场景构建和专家判读体系的重要性。作者基于15年行业经验指出,仅靠客观指标无法保证观感质量,提出四类标准场景(灰阶、肤色、纹理、动态)的构建原则和四种专家判读维度(通透性、干净度、自然感、流程化)。文章揭示了主观评价中的常见误区,包括光源单一性、个人判读偏差、显示设备影响等,并建议建立多专家交叉验证机制和主观评价数据库。最后强调主观评价是可标准化的专业技术,需要将人眼感知转化为可追溯的技术参数。

sundong_81的博客 39

TXS0104EPWR 4通道电平转换模块原理图设计,已量产

在嵌入式系统设计中,不同模块间的电平不兼容是常见问题 —— 比如 1.8V 的 MCU 与 3.3V 的传感器通信,或是 3.3V 的外设与 5V 的主控交互。这类场景下,一款高效、低功耗的双向电平转换器就成了关键组件。本文将结合实际原理图,深度解析 TI TXS0104 这款 4 通道双向电平转换器的设计要点与应用实践。

不脱发的程序猿 489

数据结构与算法-排序-插入排序

package sort; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; /** * @author taoke * @desc 插入排序 * @email 1504806660@qq.com * @date 2022/1/5 */ public class InsertSort { public static void main(String[] args) {

Strange_boy的博客 303

VTK:vtkAssembly用法实战

VTK:vtkAssembly用法实战程序输出程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkAssembly.h> #include <vtkAxesActor.h> #include <vtkCubeSource.h> #include <vtkNamedColors.h> #include <vtkNew.h> #include <vtkOrientation

希望我的博客,能帮上你解决学习中工作中所遇到的问题 936

【Python数据分析—NumPy】7.NumPy专用函数

7.NumPy专用函数 文章目录1、排序(np.lexsort())2、复数排序(np.sort_complex())3、搜索(np.argmax()、np.argmin()、np.nanargmax()、np.argwhere()、np.searchsorted()、np.insert()、np.extract()、np.nonzero())4、金融函数5、窗函数6、专用数学函数(np.i0()、np.sinc())总结 1、排序(np.lexsort())    2、复数排序(np.sort_c

每天都在学习的小博主 2476

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python 数据分析三剑客之 NumPy(五):数学 / 算术 / 统计 / 排序 / 条件 / 判断函数合集

文章目录【1x00】NumPy 数学函数【1x01】三角函数【1x02】舍入函数 【1x00】NumPy 数学函数 【1x01】三角函数 在求三角函数时,会先将角度转化成弧度,在 NumPy 中的转化公式:角度 * numpy.pi/180 函数 描述 sin() 正弦函数 cos() 余弦函数 tan() 正切函数 arcsin() 反正弦函数 arccos(...

BOB'S BLOG 4690

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python数据分析基础教程:Numpy学习指南

第二章 Numpy基础2.6 改变数组维度ravel()、flatten() 将多维数组展平b.transpose() 矩阵转置,等同于b.T,一维数组不变reshape() 改变数组维度2.8 组合数组hstack((a, b)) 水平组合,等同于 concatenate((a, b), axis=1) vstack((a, b)) 垂直组合,等同于 concatenate((a, b), ax...

凌风探梅的专栏 5528

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

15_Numpy使用sort和argsort函数进行(行・列)排序

15_Numpy使用sort和argsort函数进行(行・列)排序 如果将NumPy函数numpy.sort()应用于二维NumPy数组ndarray,则可以获得一个ndarray,其中每一行和每一列的值都按升序分别排序。 如果要按特定的行或列进行排序,请使用numpy.argsort()。 numpy.argsort()是一个返回索引ndarray而不是排序值的函数。 将描述以下内容。 如何使用numpy.sort():获取排序数组ndarray 如何使用ndarray.sort():排序数组ndarr

qq_18351157的博客 2万+

Python中的numpy常用函数整理

导入numpy:import numpy as np 一、numpy常用函数 1.数组生成函数 np.array(x):将x转化为一个数组 np.array(x,dtype):将x转化为一个类型为type的数组 np.zeros(shape):生成shape维度大小的全0数组 np.zeros_like(a):生成与a各维度大小一致的全0数组 np.ones(shape):生...

albertolin的专栏 6430

《Python数据分析基础教程:NumPy学习指南(第2版)》笔记6:第三章 常用函数2——中位数、方差、日期、展平

本章将介绍NumPy的常用函数。具体来说,我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数。这里还将学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算。 第三章 常用函数 3.9 统计分析 股票交易者对于收盘价的预测很感兴趣。常识告诉我们,这个价格应该接近于某种均值。算数平均值和加权平均值都是在数值分布中寻找中心点的方法。然而,它们对于异常值(outlier)既不鲁棒也不敏感。举例来说,如果我们有一个高达100万美元的收盘价,这将影响到我们的计算结

mighty13的专栏 3万+

第2章 Numpy数组计算基础·代码(Python数据分析与应用第2版 微课版)

代码2.1 创建数组并查看数组属性 import numpy as np # 导入NumPy库 arr1 = np.array([1, 2, 3, 4]) # 创建一维数组 print(' 创建的数组为: ', arr1)

2301_76280462的博客 2028

python排序函数

python 基础的排序函数 sort 、sorted 、argsort 一、sort 、sorted 1.简单升序排序直接调用sorted函数即可 sort()方法仅定义在list中 ls = list([5, 2, 3, 1, 4]) ls.sort() print ls &gt;&gt;&gt;[1, 2, 3, 4, 5] sorted()方法对所有的可迭代序列都有效,返回list l1...

Omghhhhhh的博客 1万+

【NumPy】全面解析NumPy的sort函数:高效排序算法与应用技巧

全面解析NumPy的sort函数:高效排序算法与应用技巧

科技改变人类,技术成就未来 1733

Python数据分析的15个NumPy应用!

掌握这些高级应用和优化技巧,将使你在数据分析的道路上更加得心应手。好了,今天的分享就到这里了,我们下期见。【点击这里】领取!包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!①Python所有方向的学习路线图,清楚各个方向要学什么东西②100多节Python课程视频,涵盖必备基础、爬虫和数据分析③100多个Python实战案例,学习不再是只会理论④。

2301_78217634的博客 1167

python及numpy排序函数的一点总结

经常使用python和numpy进行排序,但没有很好的总结,以至于每次遇到新问题是都要看一遍manual或网上找。说实话在网上找的好些都是参差不齐、断章取义。下面对这些做点基本总结。 网上关于python及numpy排序函数,感觉比较好的有: 1、https://www.runoob.com/numpy/numpy-sort-search.html 2、https://blog.csdn.n...

007的博客 1230

python numpy--专用函数

一、排序函数 1、ndarray类的sort方法——可对数组进行原地排序; import numpy as np # 准备一个矩阵 a = np.mat('3 1 2; 0 5 4; 7 3 6') a matrix([[3, 1, 2], [0, 5, 4], [7, 3, 6]]) np.sort(a) #使用函数进行排序 matrix([[1, 2, ...

qq_43287650的博客 2259

Python NumPy(11):NumPy 排序、条件筛选函数

NumPy 提供了多种排序的方法。这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。下表显示了三种排序算法的比较。

游王子og的博客 965
上一篇: 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记14:第六章 深入学习NumPy模块2——随机数模块random
下一篇: 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记16:第七章 专用函数2——金融函数
mighty13
博客等级 码龄23年 728粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值