python数据分析numpy_Python数据分析——numpy

本文详细介绍了Python数据分析库NumPy的核心功能,包括ndarray多维数组的创建、属性、类型转换、数组操作如重塑、合并、拆分,以及索引、切片、布尔型和花式索引。此外,还涵盖了数组的运算,如标量运算、通用函数、条件逻辑运算、统计运算、排序、集合运算和线性代数。最后,讨论了数组的存储和读取方法,并给出了图像变换的综合示例。
摘要由CSDN通过智能技术生成

**

numpy库是用于科学计算的一个开源的Python扩充程序库,是其他数据分析包的基础包,它为Python提供了高性能的数组与矩阵运算处理能力。

**

2.1:ndarray多维数组

2.1.1:创建ndarray数组

通过NumPy库的array函数,即可轻松地创建ndarray数组。NumPy库能将序列数据(列表,元组、数组或其他序列类型)转换为ndarray数组。

在使用前需要引入numpy库:import numpy as np

语法:np.array(data)

参数说明:data为需要转换为ndarray数组的序列

通常来说,ndarray是一个通用的同构数据容器,即其中的所有元

素都需要是相同的类型。当创建好一个ndarray数组时,同时会在

内存中存储ndarray的shape和dtype。

shape:ndarray维度大小的元组。

dtype:解释说明ndarray数据类型的对象。

NumPy库还有一些函数可以创建一些特殊的数组。

096f1e149d6d29e7ec75596eb15e0263.png

2.1.2:ndarray对象属性

3056d7e7706edf354936cd8b6c18c7f2.png

2.1.3:ndarray数组类型

在创建数组时,NumPy会为新建的数组推断出一个合适的数据类型。同样也可以通过dtype给创建的数组指定数据类型。

数组的数据类型有很多,只需要记住最常见的几种数据类型即可,如浮点数(float)、整数(int)、复数(complex)、布尔值(bool)、字符串(string_)和Python对象(object)。

对于创建好的ndarray,可通过astype方法进行数据类型的转换。

语法:arr.astype(np.float64|'float64')

说明:arr:ndarray数组

2.1.4:数组转换

数组重塑

对于定义好的数组,可以通过reshape方法改变其数据维度。

语法:arr.reshape((x,y))

说明:

arr:ndarray数组

x:行

y:列,可以设置为-1,表示数组的维度可以通过数据本身来推断

与reshape相反的方法是数据散开(ravel)或扁平化(flatten)。

语法:arr.ravel()

说明:arr:ndarray数组

语法:arr.flatten()

说明:arr:ndarray数组

2.数组合并

数组合并用于几个数组间的操作,concatenate方法通过指定轴方向,将多个数组合并在一起。

注意:轴用来为超过一维的数组定义的属性,二维数组拥有两个轴:第0轴(axis=0)沿着行的垂直往下,第1轴(axis=1)沿着列的方向水平延伸。

语法:np.concatenate([arr1, arr2], axis=0|1)

说明:

arr1、arr2:ndarray数组

axis:指定轴

此外,NumPy中提供了几个比较简单易懂的方法,也可以进行数组合并,如vstack和hstack。

语法:np.vstack((arr1, arr2))

说明:arr1、arr2:ndarray数组

语法:np.hstack((arr1, arr2))

说明:arr1、arr2:ndarray数组

3.数组拆分

数组拆分是数组合并的相反操作,通过split方法可以将数组拆分为多个数组。

语法:np.split(arr, indices_or_sections, axis=0)

说明:arr:要切分的数组

indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)

axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分。

数组置换和轴对换

转置是数组重塑的一种特殊形式,可以通过transpose方法进行转置。

transpose方法需要传入轴编号组成的元组,这样就完成了数组的转置。

数组的T属性,也可用于数组的转置。

a1ba37424c3a273584097a45db3e0022.png

ndarray的swapaxes方法用于轴对换。

7fdef1d15b904a805666b68be8ce465c.png

2.1.5:NumPy的随机数函数

fa649c6bb3988c6006b839d0ec87282e.png

7b565c07a88e27e4396a8b598a6a86d7.png

2.2 数组的索引和切片

2.2.1:数组的索引

一维数组的索引类似Python列表。

数组的切片返回的是原始数组的视图。简单地说,视图就是原始数组的表现形式,切片操作并不会产生新数据,这就意味着在视图上的操作都会使原数组发生改变。

如果需要的并非视图而是要复制数据,则可以通过copy方法来实现。

853d44217f63770d403992eee343b708.png

可以通过下图来理解轴的概念和二维数组的索引方式。在高维数组中,如果省略后面的索引,则会返回低一个维度的数组。

ec1bab99e985be9b2c9c198c02a9aded.png

2.2.2: 数组的切片

一维数组的切片同样类似于Python列表。

多维数组的切片是按照轴方向进行的,当在中括号中输入一个参数时,数组就会按照0轴(也就是第一轴)方向进行切片。

12a20da5be3ba0909f1f5b9c5180cd15.png

python numpy数组中冒号的使用:

python中冒号实际上有两个意思:1.默认全部选择;2. 指定范围。

第一种意思,默认全部选择:

如,X[:,0]就是取矩阵X的所有行的第0列的元素,X[:,2] 就是取所有行的第2列的元素

fb5f151d238df8a622171bb0fcc436cf.png

第二种意思,指定范围,注意这里含左不含右

如,X[:, m:n]即取矩阵X的所有行中的第m到n-1列数据,含左不含右

8cd0c363d66768100222ecce5a89fea3.png

d66a6de870f5279a6b8dd13b2f59217c.png

2.2.3:布尔型索引

首先创建两个数组fruits、datas,假设fruits中每个水果对应于datas数组中的每一行,我们要取出“pear”对应的datas的行,就需要用到布尔选择器。

注意:布尔型数组的长度必须和被索引的轴长度一致

2ce2a4a57738e5d96cd094e5e6d046eb.png

506f315c6d8bbdbfdeccd0cf3ab4b872.png

2.2.4:花式索引

花式索引是NumPy中的术语,它可以通过整数列表或数组进行索引。也可以使用np.ix_函数完成同样的操作。

4bd3bdee308f8ede7a89b5e3b764132b.png

5712dafe2e368d8e57caa0d86cddaa43.png

2.3:数组的运算

2.3.1:数组和标量间的运算

标量:亦称“无向量”。有些物理量,只具有数值大小,而没有方向,部分有正负之分。物理学中,标量(或作纯量)指在坐标变换下保持不变的物理量。用通俗的说法,标量是只有大小,没有方向的量。

eaeefe1c1a6a7f9824690e7952f3d51d.png

cfaf21dc6c2f73b5b45b94573515341d.png

数组之所以很强大而且重要的原因,是其不需要通过循环就可以完成批量计算,也就是矢量化。相同维度的数组的算术运算都可以直接应用到元素中,也就是元素级运算。

3417b7c3d3cbc2b0679d1b2f2bc46dd0.png

31bef67d190dd8397d43e517087a9d9f.png

2.3.2:通用函数

通用函数是一种对数组中的数据执行元素级运算的函数。例如,通过abs函数求绝对值,square函数求平方。以下函数都是传入一个数组,所以这些函数都是一元函数。

bada417f32692ab9debe496eb816244c.png

有一些函数需要传入两个数组并返回一个数组,这些函数被称为二元函数。例如,add函数用于两个数组的相加,minimum函数可以计算元素最小值。

5b89ccea96f1915f89cfb4ce2e530ad1.png

有些通用函数还可以返回两个数组,例如modf函数,可以返回数组元素的小数和整数部分。

90e24b1168f065e9cf7f5d9e563be79b.png

2.3.3: 条件逻辑运算

如果需要通过cond的值来选取arr1和arr2的值,当cond为True时,选择arr1的值,否则选择arr2的值,可以通过if语句判断来实现。

创建数组:

9995493afa8ba8c92b5332fe2a508173.png

条件逻辑:

13b3a5b9a23da47bfda79d5dd3683a33.png

上述方法存在两个问题:第一,对大规模数组处理速度不是很快;第二,无法用于多维数组。若使用NumPy的where函数,则可以解决这两个问题。

945feca82b520b685d9f8a78b8290390.png

where函数中的第二个和第三个参数可以为标量。

在数据分析中,经常需要通过一些条件将数组进行处理。例如,新建一个随机符合正态分布的数组,通过数据处理将正值替换为1,负值替换为-1。

07d6437be9e0d1cffd2e127e43212c67.png

2.3.4:统计运算

NumPy库支持对整个数组或按指定轴向的数据进行统计计算。例如,sum函数用于求和;mean函数用于求算术平均数;std函数用于求标准差。

bdb8d1b1633d7017b03d8a781dbe7115.png

基本数组的统计方法如下表:

5e927933bceb627d1ffa68fe8fb2ed60.png

2.3.5:布尔型数组运算

对于布尔型数组,其布尔值会被强制转换为1(True)和0(False)。

e54242bd18e9ccee5c9956dab0a2fadb.png

另外,还有两个方法any和all也可以用于布尔型数组运算。any方法用于测试数组中是否存在一个或多个True;all方法用于检查数组中的所有值是否为True。

6ad2486412f82b91cb064e82327d2db6.png

2.3.6:排序

与Python列表类似,NumPy数组也可以通过sort方法进行排序。

7aa7587e38ecc525f3b526c924693606.png

对于多维数组,可以通过指定轴方向进行排序。

5ee3217f41af31a2b24d42ce45c0ef1a.png

2.3.7:集合运算

NumPy库中提供了针对一维数组的基本集合运算。在数据分析中,常使用np.unique方法来找出数组中的唯一值。

注意:对唯一值进行了排序。

758be16095edfa67d56a7276c052cfee.png

数组的集合运算如下表所示。

69df58d04734ac5bf21edcb65369889c.png

2.3.8:线性代数

前面讲过数组的运算是元素级的,数组相乘的结果是各对应元素的积组成的数组。而对于矩阵而言,需要求的是点积,这里NumPy提供了用于矩阵乘法的dot函数。

29de40723ed75b20baf50114b65e392c.png

矩阵乘法解释:

0f38bb8a74e8733af4c8d118262acfca.png

2.4 数组的存取

2.4.1:数组的存储

通过np.savetxt方法可以对数组进行存储。参数介绍如下:

np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n',

header='', footer='', comments='# ', encoding=None)

fname:文件名/文件路径,如果文件后缀是.gz,文件将被自动保存为.gzip格式,np.loadtxt可以识别该格式:

X:要存储的1D或2D数组

fmt:控制数据存储的格式

delimiter:数据列之间的分隔符

newline:数据行之间的分隔符

header:文件头部写入的字符串

footer:文件底部写入的字符串

comments:文件头部或者尾部字符串的开头字符,默认是’#’

encoding:使用默认参数

2.4.2:数组的读取

对于存储的文件,可以通过np.loadtxt方法进行读取,并将其加载到一个数组中。参数介绍如下:

np.loadtxt(fname,dtype=,comments='#',delimiter=None,converters=None,skiprows=0,usecols=None,unpack=False,ndmin=0,encoding='bytes')

fname:文件名/文件路径,如果文件后缀是.gz或.bz2,文件将被解压,然后再载入

dtype:要读取的数据类型

comments:文件头部或者尾部字符串的开头字符,用于识别头部,尾部字符串

delimiter:划分读取值的字符串

converters:数据行之间的分隔符

2.5 综合示例—图像变换

图像一般采用的是RGB色彩模式,即每个像素点的颜色有R(红)、G(绿)、B(蓝)组成。通过三种颜色的叠加可以得到各种颜色,每个颜色的取值范围为0~255。Python中的PIL库是一个处理图像的第三方库。

2.6:本章总结

本章主要讲解了:ndarray数组的创建和属性,数组的切片和索引方法,数组的各类运算,数组的存储和读取,图像的处理方法.

通过本章学习,希望同学们能够掌握NumPy库中数组的创建、属性、各种操作和运算,能够使用数组进行数据分析的编程,了解图像处理方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值