版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python财经应用:编程基础、数据分析与可视化第五章NumPy数值计算中国农业大学李辉NumPy
数值计算在财经数据分析领域,NumPy是Python核心科学计算库。它提供高效数组操作及数学运算能力,是处理大规模金融数据的基础框架。本章节系统介绍
NumPy数组操作与应用,包括创建、访问、运算及操作等内容。详细讲解数组创建与访问方法,如多维数组初始化、属性查询及索引切片,为金融数据结构化存储提供支持。在运算部分,探讨转置、算术运算等应用,像在资产组合权重等计算中很关键,点积运算在投资组合预期收益计算时效率高。数组操作章节聚焦排序与合并算法应用,通过案例展示其对交易数据和多市场数据整合的优化作用。掌握这些技术能提升财经分析师处理大规模时间序列数据和构建量化模型的能力。目录01数组的创建与访问02数组的运算03数组的操作目录01数组的创建与访问02数组的运算03数组的操作5.1
数组的创建与访问第五章NumPy数值计算在使用NumPy之前,必须先安装NumPy模块,使用pip工具,安装命令为:pipinstallnumpy。使用NumPy库前必须先执行下列导入操作:fromnumpyimport*,或者采用importnumpyasnp语句,表示导入NumPy库,并用np作为别名,后文不再赘述。可以通过np.__version__查看NumPy的版本信息。NumPy的数据结构是N维(多维)的数组对象,称为ndarray(或array)对象。数组对象可以存储相同类型、以多种形式组织的数据,组成数组的各数据称为数组的元素。NumPy提供了两种基本的对象:ndarray(n-dimensionalarrayobject):存储单一数据类型的多维数组。ufunc(universalfunctionobject):一种能够对数组进行处理的函数。数组的创建与访问数组的创建与访问——创建数组NumPy提供了多种创建数组的方法,可以创建多种形式的数组。一维数组只有一个维度,二维数组有两个维度,从形式上可以看作一个由行和列构成的二维表格,每个维度对应一个轴(axis)。如图所示是一个二维数组,包含4行4列,第1维度(即第0轴)有4行,第2维度(即第1轴)有4列。1.使用array函数创建数组对象使用array函数可以将Python序列对象或可迭代对象转换为NumPy数组。【例5-1】利用array函数生成NumPy数组。数组的创建与访问——创建数组实现代码如下:
importnumpyasnp#4只股票投资组合中的配置权重值列表weight=[0.25,0.35,0.20,0.20]weight_array=np.array(weight)#转为NumPy数组print(type(weight_array))print(weight_array)#4只股票5天的涨跌幅数据列表rise_or_fall=[[0.02,-0.01,0.03,-0.02,0.01],[-0.01,0.03,-0.02,0.01,-0.03],[0.03,-0.01,0.02,-0.03,0.01],[-0.02,0.01,-0.03,0.02,-0.01]]rise_or_fall_array=np.array(rise_or_fall)print(type(rise_or_fall_array))print(rise_or_fall_array)数组的创建与访问——创建数组运行结果如下:
<class'numpy.ndarray'>[0.250.350.20.2]<class'numpy.ndarray'>[[0.02-0.010.03-0.020.01][-0.010.03-0.020.01-0.03][0.03-0.010.02-0.030.01][-0.020.01-0.030.02-0.01]]数组的创建与访问——创建数组2.使用arange函数根据指定数值范围创建数组使用arange函数创建基于指定区间,均匀分布数值的数组。语法结构为:用法类似Python的内置函数range(),只不过arange函数生成的是一系列数字元素的数组。【例5-2】使用arange函数创建数组示例。arange(start,stop,step)
importnumpyasnparr_1=np.arange(6)#创建一个由0~5的整数组成的一维数组print(arr_1)arr_2=np.arange(1,10,2)#创建一个元素为1~10、步长为2的数据组成的一维数组print(arr_2)数组的创建与访问——创建数组运行结果如下:
[012345][13579]数组的创建与访问——创建数组还可以用arange函数结合reshape()方法改变数组的维度,例如将arr_1改为2行3列的二维数组,运行结果如下:
[[012][345]]
new_arr=arr_1.reshape(2,3)print(new_arr)数组的创建与访问——创建数组
importnumpyasnparr_1=np.random.randint(0,50,size=(3,4))#3行×4列的随机整数print(arr_1)arr_2=np.random.rand(4)#[0,1)之间均匀分布的随机数print(arr_2)arr_3=np.random.standard_normal(5)#符合标准正态分布的随机数print(arr_3)3.创建随机数数组使用numpy.random模块中的函数可以创建随机整数数组、随机小数数组、符合正态分布的随机数数组等。说明:由于是随机数,所以每次的执行结果都不完全相同。【例5-3】创建随机数数组示例。数组的创建与访问——创建数组运行结果如下:
[[47272524][32421341][3741831]][0.50559110.926484010.596023710.10923207][0.225335951.29729245-1.403894561.36343792-1.67341697]数组的创建与访问——创建数组
importnumpyasnpforiinrange(3):np.random.seed(18)print(i,np.random.random())foriinrange(3):np.random.seed(i)print(i,np.random.random())seed函数用于指定随机数生成时所用算法开始的整数值。(1)如果使用相同的seed函数值,则每次生成的随机数都相同。(2)如果不设置这个值,则系统根据时间来自己选择这个值,生成自己的种子,此时每次生成的随机数因时间差异而不同。(3)设置的seed函数值仅一次有效。【例5-4】seed函数的使用。数组的创建与访问——创建数组运行结果如下:
00.650374241739591710.650374241739591720.650374241739591700.548813503927324810.41702200470257420.43599490214200376数组的创建与访问——创建数组4.创建数组的其他方式在金融建模时,经常会设定一些的数组,比如元素为0或者1的数组,以方便后续的计算。NumPy库还提供了很多创建数组的其他函数。函数功能zeros()创建元素全为0的数组ones()创建元素全为1的数组ones_like()创建与已有数组相同形状的零数组full()创建元素全为某个指定值的数组数组的创建与访问——创建数组4.创建数组的其他方式在金融建模时,经常会设定一些的数组,比如元素为0或者1的数组,以方便后续的计算。NumPy库还提供了很多创建数组的其他函数。函数功能linespace()用指定的起始值、终止值和元素个数创建一个等差数列logspace()用指定的起始值、终止值和元素个数创建一个对数数列identity()/eye()创建单位矩阵数组的创建与访问——查看数组属性通过NumPy对象的shape、ndim、size、dtype等属性可以查看数组的形状、维度、大小和元素的数据类型。利用shape属性查看数组形状时,返回的元组中包含几个元素就表示这是几维数组,例如(4,)表示元组中只有一个元素,因此该数组为1维数组,而(4,5)二维数组;元组中的元素值表示每个维度的数据量,即每个轴的长度,例如(4,)表示该一维数组由4个数据组成,(4,5)表示该二维数组包含4行5列数据。数组的创建与访问——访问数组数组支持通过索引和切片访问数组元素,通过索引可以访问数组的单个元素,多个元素或一整行元素,NumPy中提供了多种形式的索引,常用的索引方式包括整数索引和布尔索引。1.整数索引:通过数组的下标访问数组。(1)访问一维数组数组对象名[下标]说明:可以使用索引、切片、列表作为下标。索引和切片的使用方法与访问列表相同。数组也支持双向索引,当正整数作为下标时,0表示第1个元素,1表示第2个元素,以此类推;当负整数作为下标时,-1表示最后1个元素,-2表示倒数第2个元素,以此类推。数组的创建与访问——访问数组数组支持通过索引和切片访问数组元素,通过索引可以访问数组的单个元素,多个元素或一整行元素,NumPy中提供了多种形式的索引,常用的索引方式包括整数索引和布尔索引。1.整数索引:通过数组的下标访问数组。(2)访问二维数组语法格式1:数组对象名[行下标]说明:按行访问,行下标可以是索引、切片或列表形式。数组的创建与访问——访问数组数组支持通过索引和切片访问数组元素,通过索引可以访问数组的单个元素,多个元素或一整行元素,NumPy中提供了多种形式的索引,常用的索引方式包括整数索引和布尔索引。1.整数索引:通过数组的下标访问数组。(2)访问二维数组语法格式2:数组对象名[行下标,列下标]说明:通过行和列两个维度定位元素。行下标和列下标可以是索引、切片或列表形式。使用“:”可以表示所有行或所有列。数组的创建与访问——访问数组数组支持通过索引和切片访问数组元素,通过索引可以访问数组的单个元素,多个元素或一整行元素,NumPy中提供了多种形式的索引,常用的索引方式包括整数索引和布尔索引。2.布尔型索引访问:数组对象名[布尔型索引]说明:布尔型索引通过一组布尔值(True或False)对NumPy数组进行取值操作,返回数组中索引值与True位置对应的元素。通常利用数组的条件运算(也称为布尔运算)得到一组布尔值,再通过这组布尔值从数组中选出满足条件的元素。数组的创建与访问——修改数组对于已经建立的数组,可以修改数组元素,也可以改变数组的形状。1.修改数组元素使用下列NumPy函数可以添加或删除数组元素。这些操作会返回一个新的数组,原数组不受影响。append:追加一个元素或一组元素。insert:在指定位置插入一个元素或一组元素。delete:删除指定位置上的一个元素。通过为数组元素重新赋值也可以修改数组元素,但赋值操作属于“原地修改”,会改变原来的数组。数组的创建与访问——修改数组2.查询数组元素数组的查询既可以使用索引和切片方法来获取指定范围的数组或数组元素,还可以通过where函数查询符合条件的数组或数组元素。where函数的语法如下:numpy.where(condition,x,y)说明:第一个参数condition为一个布尔数组,第二个参数x和第三个参数y可以是标量也可以是数组。功能:满足条件(参数condition),则输出参数x;不满足条件则输出参数y。如果不指定参数x和y,则输出满足条件的数组元素。数组的创建与访问——修改数组3.数组的重塑数组重塑实际是更改数组的形状,例如,将原来2行3列的数组重塑为3行2列的数组。使用数组对象的shape属性和reshape()、flatten()、ravel()等方法可以在保持元素数目不变的情况下改变数组的形状,即只是改变数组每个轴的长度来实现数组的重塑。在NumPy中常使用reshape()方法用于改变数组的形状。与reshape()相反的功能方法是数据散开(ravel()方法)或数据扁平化(flatten()方法)。【例5-13】数组重塑示例。数组的创建与访问——创建数组实现代码如下:
importnumpyasnp#4只股票5天的涨跌幅数据列表rise_or_fall=[0.02,-0.01,0.03,-0.02,0.01,-0.01,0.03,-0.02,0.01,-0.03,0.03,-0.01,0.02,-0.03,0.01,-0.02,0.01,-0.03,0.02,-0.01]rise_or_fall_array=np.array(rise_or_fall)print("创建的一维数组为:\n",rise_or_fall_array)re_rise_or_fall_array=rise_or_fall_array.reshape(4,5)print("由一维变二维数组为:\n",re_rise_or_fall_array)ra_rise_or_fall_array=re_rise_or_fall_array.ravel()print("数据散开为:\n",ra_rise_or_fall_array)数组的创建与访问——创建数组运行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养老护理员老年护理服务培训课件
- 2026年深圳中考物理考场实战模拟试卷(附答案可下载)
- 2026年大学大二(口腔医学技术)口腔正畸工艺学综合测试题及答案
- 线线角题目及答案
- 科技题目大全及答案
- 电力营销初赛题库及答案
- 2026年人教版英语七年级下册期末质量检测卷(附答案解析)
- 2026年广州中考政治学习新天地专项突破试卷(附答案可下载)
- 2026年教育机构咨询合同
- 2025贵州织金县官寨苗族乡人民政府招聘公务用车驾驶员备考题库及答案详解(新)
- 商住楼项目总体规划方案
- 2022储能系统在电网中典型应用
- 互联网+物流平台项目创办商业计划书(完整版)
- 家庭学校社会协同育人课件
- IABP主动脉球囊反搏课件
- 基于python-的车牌识别
- 《LTCC生产流程》课件
- 年度工作总结PPT模板
- 7KW交流交流充电桩说明书
- 丧假国家规定
- 唯物史观指导初中历史教学
评论
0/150
提交评论