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

**

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库还有一些函数可以创建一些特殊的数组。

python数据分析numpy_Python数据分析——numpy_第1张图片

2.1.2:ndarray对象属性

python数据分析numpy_Python数据分析——numpy_第2张图片

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属性,也可用于数组的转置。

python数据分析numpy_Python数据分析——numpy_第3张图片

ndarray的swapaxes方法用于轴对换。

python数据分析numpy_Python数据分析——numpy_第4张图片

2.1.5:NumPy的随机数函数

python数据分析numpy_Python数据分析——numpy_第5张图片

7b565c07a88e27e4396a8b598a6a86d7.png

2.2 数组的索引和切片

2.2.1:数组的索引

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

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

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

python数据分析numpy_Python数据分析——numpy_第6张图片

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

python数据分析numpy_Python数据分析——numpy_第7张图片

2.2.2: 数组的切片

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

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

python数据分析numpy_Python数据分析——numpy_第8张图片

python numpy数组中冒号的使用:

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

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

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

python数据分析numpy_Python数据分析——numpy_第9张图片

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

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

python数据分析numpy_Python数据分析——numpy_第10张图片

python数据分析numpy_Python数据分析——numpy_第11张图片

2.2.3:布尔型索引

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

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

python数据分析numpy_Python数据分析——numpy_第12张图片

python数据分析numpy_Python数据分析——numpy_第13张图片

2.2.4:花式索引

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

python数据分析numpy_Python数据分析——numpy_第14张图片

python数据分析numpy_Python数据分析——numpy_第15张图片

2.3:数组的运算

2.3.1:数组和标量间的运算

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

python数据分析numpy_Python数据分析——numpy_第16张图片

python数据分析numpy_Python数据分析——numpy_第17张图片

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

python数据分析numpy_Python数据分析——numpy_第18张图片

python数据分析numpy_Python数据分析——numpy_第19张图片

2.3.2:通用函数

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

python数据分析numpy_Python数据分析——numpy_第20张图片

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

python数据分析numpy_Python数据分析——numpy_第21张图片

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

python数据分析numpy_Python数据分析——numpy_第22张图片

2.3.3: 条件逻辑运算

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

创建数组:

9995493afa8ba8c92b5332fe2a508173.png

条件逻辑:

python数据分析numpy_Python数据分析——numpy_第23张图片

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

python数据分析numpy_Python数据分析——numpy_第24张图片

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

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

python数据分析numpy_Python数据分析——numpy_第25张图片

2.3.4:统计运算

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

python数据分析numpy_Python数据分析——numpy_第26张图片

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

python数据分析numpy_Python数据分析——numpy_第27张图片

2.3.5:布尔型数组运算

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

python数据分析numpy_Python数据分析——numpy_第28张图片

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

python数据分析numpy_Python数据分析——numpy_第29张图片

2.3.6:排序

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

python数据分析numpy_Python数据分析——numpy_第30张图片

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

python数据分析numpy_Python数据分析——numpy_第31张图片

2.3.7:集合运算

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

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

python数据分析numpy_Python数据分析——numpy_第32张图片

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

python数据分析numpy_Python数据分析——numpy_第33张图片

2.3.8:线性代数

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

python数据分析numpy_Python数据分析——numpy_第34张图片

矩阵乘法解释:

python数据分析numpy_Python数据分析——numpy_第35张图片

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库中数组的创建、属性、各种操作和运算,能够使用数组进行数据分析的编程,了解图像处理方法。

你可能感兴趣的:(python数据分析numpy)