1.认识Numpy数组对象
Numpy是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy中最重要的一个特点就是其N维数组对象,即array对象,该对象可以执行一些科学计算。
2.创建NumPy数组
最简单的创建ndarray对象的方式是使用array()函数,在调用该函数时传入一个列表或者元组 。
# 创建一个一维数组
data1 = np.array([1, 2, 3])
# 创建一个二维数组
data2 = np.array([[1, 2, 3], [4, 5, 6]])
通过zeros()函数创建元素值都是0的数组;通过ones()函数创建元素值都为1的数组。
通过arange()函数可以创建一个等差数组,它的功能类似于range(),只不过arange()函数返回的结果是数组,而不是列表。
3.array对象的数据类型
查看数据类型
1>ndarray.dtype可以创建一个表示数据类型的对象,如果希望获取数据类型的名称,则需要访问name属性进行获取。
data_one = np.array([[1, 2, 3], [4, 5, 6]])
data_one.dtype.name
2>NumPy的数据类型是由一个类型名和元素位长的数字组成。
2>转换数据类型
4.array的索引与切片
对于一维数组来说,从表面上来看,它使用索引和切片的方式,与Python列表的功能相差不大。
对于多维数组来说,索引和切片的使用方式与列表就大不一样了,比如二维数组的索引方式如下:
在二维数组中,每个索引位置上的元素不再是一个标量了,而是一个一维数组。
如果想获取二维数组的单个元素,则需要通过形如“arr[x,y]”的索引来实现,其中x表示行号,y表示列号。
多维数组的切片是沿着行或列的方向选取元素的,我们可以传入一个切片,也可以传入多个切片,还可以将切片与整数索引混合使用。
5.数组的转置和轴对称
数组的转置指的是将数组中的每个元素按照一定的规则进行位置变换。
简单的转置可以使用T属性,它其实就是进行轴对换而已。
当使用transpose()方法对数组的shape进行调换时,需要以元组的形式传入shape的编号,比如(1,0,2)。
数组的转置和轴对06 数组的转置和轴对称06 数组的转置和轴对称称06 数组的转置和轴对称06 shu数组·1
如果我们不输入任何参数,直接调用transpose()方法,则其执行的效果就是将数组进行转置,作用等价于transpose(2,1,0)。
6.NumPy通用函数
我们将ufunc中接收一个数组参数的函数称为一元通用函数,接受两个数组参数的则称为二元通用函数。
常见的一元通用函数如下表:
常见的二元通用函数如下表:
7.利用Numpy数组进行数据处理
1>将条件逻辑转为数组运算
NumPy的where()函数是三元表达式x if condition else y的矢量化版本。
2>数组统计运算
通过NumPy库中的相关方法,我们可以很方便地运用Python进行数组的统计汇总。
3>数组排序
如果希望对NumPy数组中的元素进行排序,可以通过sort()方法实现。
如果希望对任何一个轴上的元素进行排序,则需要将轴的编号作为sort()方法的参数传入。
4>检索数组元素
all()函数用于判断整个数组中的元素的值是否全部满足条件,如果满足条件返回True,否则返回False。
any()函数用于判断整个数组中的元素至少有一个满足条件就返回True,否则就返回False。
5>唯一化及其他集合逻辑
针对一维数组,NumPy提供了unique()函数来找出数组中的唯一值,并返回排序后的结果。
in1d()函数用于判断数组中的元素是否在另一个数组中存在,该函数返回的是一个布尔型的数组。
NumPy提供的有关集合的函数还有很多,常见的函数如下表所示。
8.线性代数模块
numpy.linalg模块中有一组标准的矩阵分解运算以及诸如逆和行列式之类的东西。
例如,矩阵相乘,如果我们通过“*”对两个数组相乘的话,得到的是一个元素级的积,而不是一个矩阵点积。
NumPy中提供了一个用于矩阵乘法的dot()方法。
矩阵点积的条件是矩阵A的列数等于矩阵B的行数,假设A为 m*p的矩阵,B为 p*n 的矩阵,那么矩阵A与B的乘积就是一个 m*n 的矩阵C,其中矩阵C的第i行第j列的元素可以表示为:
除此之外,linalg模块中还提供了其他很多有用的函数。
9.随机数模块
与Python的random模块相比,NumPy的random模块功能更多,它增加了一些可以高效生成多种概率分布的样本值的函数。
# 随机生成一个二维数组
np.random.rand(3, 3)
rand()函数隶属于numpy.random模块,它的作用是随机生成N维浮点数组。
除此之外,random模块中还包括了可以生成服从多种概率分布随机数的其它函数。
seed( )函数可以保证生成的随机数具有可预测性,也就是说产生的随机数相同。
numpy.random.seed(seed=None)
上述函数中只有一个seed参数,用于指定随机数生成时所用算法开始的整数值。
当调用seed()函数时,如果传递给seed参数的值相同,则每次生成的随机数都是一样的。
当传递的参数值不同或者不传递参数时,则seed()函数的作用跟rand()函数相同,即多次生成随机数且每次生成的随机数都不同。



