版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python财经应用:编程基础、数据分析与可视化第五章NumPy数值计算中国农业大学李辉目录01数组的创建与访问02数组的运算03数组的操作目录01数组的创建与访问02数组的运算03数组的操作5.2数组的运算第五章NumPy数值计算数组的运算——数组的转置
importnumpyasnp#4只股票投资组合中的配置权重值列表weight=[0.25,0.35,0.20,0.20]weight_array=np.array(weight)print("输出原矩阵:\n",weight_array)t_weight_array=weight_array.T#一维数组转置后和原来是一样的print("输出转置后的矩阵:\n",t_weight_array)#4只股票5天的涨跌幅数据列表数组的转置:交换数组的行和列,可以使用数组对象的T操作完成转置。【例5-14】矩阵的转置的示例。数组的运算——数组的转置
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)t_rise_or_fall_array=rise_or_fall_array.Tprint("输出转置后的矩阵:\n",t_rise_or_fall_array)数组的转置:交换数组的行和列,可以使用数组对象的T操作完成转置。【例5-14】矩阵的转置的示例。数组的运算——数组的转置运行结果如下:
输出原矩阵:[0.250.350.20.2]输出转置后的矩阵:[0.250.350.20.2]输出原矩阵:[[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]]输出转置后的矩阵:[[0.02-0.010.03-0.02][-0.010.03-0.010.01][0.03-0.020.02-0.03][-0.020.01-0.030.02][0.01-0.030.01-0.01]]数组的运算——数组的算术运算1.数组与标量的算术运算标量就是一个数值,既可以使用算术运算符又可以使用相应功能的数学函数对数组和标量进行算术运算。当数组与标量进行算术运算时,数组中的每个元素都与标量进行运算,结果返回一个新的数组。对于除法运算和乘方运算,标量在前和在后时的运算方法是不同的。算术运算算术运算符数学函数加+add()减-subtract()乘*multiply()除/divide()整除//divmod()(整除得到商和余数)取余%remainder()乘方**power()开方
√ ̄sqrt()数组的运算——数组的算术运算
importnumpyasnparr_1=np.array((1,2,3,4,5))print("数组:\n",arr_1)print("数组与2相加的结果:\n",arr_1+2)#相加print("数组与2相除的结果:\n",arr_1/2)#相除print("数组与2次幂的结果:\n",arr_1**2)#计算数组中每个元素的2次方print("数组与2相乘的结果:\n",np.multiply(arr_1,2))#相乘#结果分别表示商和余数print("数组与2整除得到商和余数的结果:\n",np.divmod(arr_1,2))【例5-15】矩阵的加、减、乘和除运算。数组的运算——数组的转置运行结果如下:
数组:[12345]数组与2相加的结果:[34567]数组与2相除的结果:[0.51.1.52.2.5]数组与2次幂的结果:[1491625]数组与2相乘的结果:[246810]数组与2整除得到商和余数的结果:(array([0,1,1,2,2]),array([1,0,1,0,1]))数组的运算——数组的算术运算2.形状相同的数组间运算当数组与数组进行算术运算时,如果两个数组的形状相同,则得到一个新数组,其中每个元素值为两个数组中相同位置上的元素进行算术运算后的结果。形状相同的数组间运算被称为数组的矢量化运算。例如,两个形状均为(2,3)的数组data1和data2,这两个数组相加得到新数组result的计算.无论形状是否相同,数组之间都可以执行算术运算,与Python的列表不同,数组在参与算术运算时,无须遍历每个元素,便可以执行批量运算,效率更高。创建数组后,可以进行算术运算、布尔运算、点积运算和统计运算等。数组间的运算需要遵循三个规律:若干个二维数组之间的运算,这些数组应当具有相同行数和相同列数(相同的形状)。二维数组与一维数组之间的运算,一维数组的元素个数应当等于二维数组的列数。若干个一维数组之间的运算,这些数组应当具有相同的元素数量。数组的运算——数组的转置数组的创建与访问——创建数组运行结果如下:
<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]]数组的创建与访问——创建数组NumPy提供了多种创建数组的方法,可以创建多种形式的数组。一维数组只有一个维度,二维数组有两个维度,从形式上可以看作一个由行和列构成的二维表格,每个维度对应一个轴(axis)。如图所示是一个二维数组,包含4行4列,第1维度(即第0轴)有4行,第2维度(即第1轴)有4列。1.使用array函数创建数组对象使用array函数可以将Python序列对象或可迭代对象转换为NumPy数组。【例5-1】利用array函数生成NumPy数组。数组的创建与访问——创建数组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)数组的创建与访问——创建数组还可以用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库还提供了很多创建数组的其他函数。函数功能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_a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省南充市2025-2026学年九年级(上)期末化学试卷(含答案)
- 2022~2023法院司法辅助人员考试题库及答案第359期
- 摄影系期末考试题及答案
- 申论教师招聘试题及答案
- 全国一卷地理试题及答案
- 广东省深圳市南山区2024-2025学年八年级上学期期末地理试卷(含答案)
- 《GAT 1365-2017警用数字集群(PDT)通信系统 网管技术规范》专题研究报告
- 《GAT 974.27-2011消防信息代码 第27部分:抢险救灾基本程序代码》专题研究报告深度
- 2026 年初中英语《时态辨析》专题练习与答案 (100 题)
- 2026年深圳中考数学梯形专项训练试卷(附答案可下载)
- 广西出版传媒集团有限公司2026年招聘备考题库附答案详解
- 陶瓷工艺品彩绘师改进水平考核试卷含答案
- 2025广东百万英才汇南粤惠州市市直事业单位招聘急需紧缺人才31人(公共基础知识)测试题附答案
- 粉尘防护知识课件
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库及完整答案详解一套
- (2025年)粮食和物资储备局招聘考试题库(答案+解析)
- 2026年乐陵市市属国有企业公开招聘工作人员6名备考题库及答案详解一套
- DB32/T+5309-2025+普通国省道智慧公路建设总体技术规范
- 人事行政部2026年年度计划
- 2026年上海市徐汇区老年大学招聘教务员备考题库完整参考答案详解
- 2026年国家电投集团苏州审计中心选聘备考题库及完整答案详解一套
评论
0/150
提交评论