Numpy 库使用小结

一 . 什么是 Numpy?

NumPy 是 Python 语言的一个扩充程式库。支援高阶大量的维度阵列与矩阵运算,此外也针对阵列运算提供大量的数学函数函式库。 ———— —-wikipedia

尤其是在这个大数据时代中,numpy 作为一个简洁易操作的用于计算的 python 库,是数据分析中不可缺少的工具。

二 . ndarray 数据结构

NumPy 的核心功能是 "ndarray"(即 n-dimensional array,多维阵列) 数据结构。这是一个表示多维度、同质并且固定大小的阵列物件。而由一个与此阵列相关联的资料型态物件来描述其阵列元素的资料格式 (例如其字元组顺序、在记忆体中占用的字元组数量、整数或者浮点数等等)。——-wikipedia

其列表转化为 ndarray 的标准形式即为np.array([list]),list 为你要转变的列表数据,将列表转化为 ndarray 有利于利用 Numpy 库对其进行各种操作。

三 . Numpy 库常用方法

使用 Numpy 库之前,按照惯例我们应该引入 (import) 其 numpy 库
官方文档的推荐写法为import numpy as np

1.ndarray 的数据查找

1.1 ndarray 数据类型查询及修改
  1. 首先我们可以使用 python 内置的 type() 函数来检测其数据类型
    . 在这里插入图片描述
    可以看到其使用了np.array([list])方法之后,其列表变成了 ndarray 的数据类型。此时便可以使用 numpy 内置函数对其进行处理了。

  2. 如果其对象已经变为了 ndarray 的数据类型,我们可以使用.dtype(全称为 datatype)的方法来检测其 ndarray 中数据类型。
    在这里插入图片描述
    int32 相当于 c 语言中的 int(4 字节),32 为每个字节 8 位进行换算。
    float64 同理,相当于 double(8 字节) 类型。
    其 ndarray 默认为整型数为 int32, 浮点数为 float64。
    另外,我们还可以使用np.array([list],dtype = np.float64)来将 ndarray 强制改变为 float64 型数据类型。
    同样的方法,使用np.array([list],dtype = np.int32) 也可以将其改变为 int32 数据类型。
    注:如果直接将浮点型 ndarray 强制改变为整型 ndarray,其数据将会舍弃小数点后面的所有位数。
    在这里插入图片描述

  3. 在构建多维数组时,.shape将会是一个检测数组维度的必不可少的方法
    在这里插入图片描述

.shape方法可以检测 ndarray 中数组(矩阵)的维度大小,以便于之后对其进行计算或提取操作。
注: 类似上图多维数组的构建方法为[[list],[list]] (此为二维 ) 的形式。

1.2 ndarray 的数据元素查询及修改

1. 类似于常规 list 中list[int]的方法,对于 ndarray 数据在这方面操作方法基本相同。在这里插入图片描述
ndarray 中也可以使用指定的下标值即可查询及修改对应的元素值
修改方法为list[int] = value ,查询方法为print(list[int])
其中 list 指你的 ndarray 的变量名,int 指其下标值。

2 . ndarray 数组内置构造方法

如上文一开始所讲,除了使用np.array([list])的方法直接构造函数之外,Numpy 库还提供了不少内置方法快速构造特殊结构的多维数组。

1 .np.zeros()

此方法可以创造指定形式的零矩阵。需要传递一个元组(tuple)参数。

2. np.ones()

此方法可以创造指定形式的值全部为 1 的矩阵。需要传递一个元组参数。

3.np.full()

此方法可以创造指定形式的值全部为另一个参数的矩阵。需要传递一个元组参数和一个数字参数。
格式为np.full(tuple,number)的形式。

4.np.eye()

此方法可以创造一个指定形式的单位矩阵。需要传递一个元组参数。
注:即使不为方形矩阵也会按照其行列最大值输出。

5.np.random.random()

此方法可以创造一个指定形式的随机数(小数点后 7~8 位)的矩阵。需要传递一个元组参数。

6.np.empty()

此方法可以创造一个指定形式的随机数(小数点后位数完全随机)。需要传递一个元组参数。

7.np.arange()

此方法可以创造一个指定形式的一位数组(由小到大)。需要传递一个整型数参数。在这里插入图片描述
在这里插入图片描述

3.Numpy 库中对 ndarray 数据进行分割取值的方法

3.1 使用 python 原生分割方法

对于 list 或者 ndarray,我们都可以使用 list[left_number:right_number]的方法对其进行分割
注:此方法取值实际上为left_number<= 取出的值 <right_number的形式。
在这里插入图片描述

3.2 使用另一个 ndarray 或 list 对原 ndarray 进行数组切割

可以先定义一个 ndarray,然后使用另一个在前一个 ndarray 范围内的另一个数组进行对点取值。
注:范围内指下一个定义的 ndarray 的每个维的数据均小于前一个 ndarray 的最大范围

  1. 使用ndarray[list]对指定 ndarray 使用 list 型参数进行取值(list 可以是多维)。
  2. 使用ndarray(array[list],array[list],array[list])(矩阵有几维就可以取多少个 array[list]) 对 ndarray 进行取值。
  3. 使用ndarray_1[np.arange(n),ndarray_2](n 为矩阵维数),ndarray_1 为原矩阵,ndarray_2 为取值用参数。

在这里插入图片描述

3.3 布尔类型数据取值方法

所谓布尔类型 (bool) 数据,就是指 true 和 false(分别代表 1 和 0)
可以使用由布尔类型数据组成的矩阵对原矩阵进行取值
注:其布尔类型的矩阵需要和原矩阵维度相同
建议直接使用判断条件将原矩阵进行筛选组成布尔类型矩阵。在这里插入图片描述

3.4 np.split() 方法分割 ndarray

此方法可以根据一定条件(你所上传的参数)将整个多维 ndarray 分割为三份。
标准方法为first,second,third = np.split(ndarray,[list],axis = 0 or 1)
first,second,third 按照 python 基本语法分别被赋值为被分割的三部分
其中 ndarray 为被分割的矩阵,list必须有两个元素且范围不超过原 ndarray 的维数,axis 之后的数字为 0 则代表行之间分割,1 为列之间分割。(如果为多维数组同理可以增加其值)在这里插入图片描述

3.5 先排序之后对其进行百分比取值

快速排序方法ndarray.sort()ndarray 指你上传的 ndarray 参数,此方法可以按全体进行由小到大的快速排序。
同时我们可以在 sort() 中传递参数,传递 0 表示行之间进行排序,1 则为列间排序。
对于百分比取值,我们可以使用ndarray[int(0.05*len(ndarray))]来对其进行在前 5% 的一个数进行取值。
在这里插入图片描述

4.ndarray 矩阵处理与运算

4.1 矩阵的加法

矩阵间的加法比较简单且常规,直接可以对应维度进行数值加减。
在这里插入图片描述

4.2 矩阵点乘法

两个向量 a = [a1, a2,…, an] 和 b = [b1, b2,…, bn] 的点积定义为:
a·b=a1b1+a2b2+……+anbn。
使用矩阵乘法并把(纵列)向量当作 n×1 矩阵,点积还可以写为:
a·b=aT*b,这里的 aT 指示矩阵 a 的转置。——Baidu

此方法旨在计算矩阵向量点乘的计算结果。标准格式为np.dot(ndarray_1,ndarray_2)
ndarray_1 和 ndarray_2 各代表被点乘的两个元素。
注:两个 ndarray 可以相同,相当于与自身点乘。如果为多维矩阵,与自己相乘必须为正方形矩阵,或者用到后面要讲的转置方法。
在这里插入图片描述

4.3 矩阵转置法

矩阵转置是指将原矩阵顺时针旋转九十度。方便于之后的计算(比如上面的点乘法就会可能会用到)
而 numpy 库提供的方法可以轻易地将矩阵转置。
其标准格式为ndarray.T, 其后面必须是大写 T。在这里插入图片描述

4.4 Numpy 多维数组简便求和及平均数的方法

将 ndarray 中所有元素进行求和,方法为np.sum(ndarray)其中 ndarray 指你传递的 ndarray 数组。
将 ndarray 中所有元素进行求平均数,方法为np.mean(ndarray)同样,ndarray 只你上传的 Numpy 数组。
另外可以使用np.mean(ndarray,axis = 1/0)添加 axis 参数,当 axis = 0 时,将三维数组按对应行进行相加并压缩为二维数组并求其均值。当 axis = 1 时,按对应列进行相同操作。在这里插入图片描述

5. 矩阵的连接与堆叠

5.1 矩阵连接

想要将两个矩阵相组合,首先得考虑两矩阵行列的大小是否相符,之后便可用如下方法进行矩阵对接。

np.concatenate([ndarray_1,ndarray_2],axis = 0)#行间连接
np.concatenate([ndarray_1,ndarray_2],axis = 1)#列间连接
np.vstack((ndarray_1,ndarray_2)#行间连接
np.hstack((ndarray_1,ndarray_2))#列间连接
np.r_[ndarray_1,ndarray_2]#按行间连接
np.c_[ndarray_1,ndarray_2]#按列间连接

ndarray_1 和 ndarray_2 分别为你上传的两个 Numpy 数组,也可以自身与自身对接堆叠。下面就会讲到其他形式的堆叠方法。在这里插入图片描述

5.2 矩阵重复堆叠

所谓重复堆叠,就是指将原矩阵按一定形式进行成倍扩增。numpy 为我们带来了 repeat 方法。

ndarray.repeat(int)

此方法可以将原矩阵进行多次堆叠,堆叠次数取决于 int。

ndarray.repeat([1,2,3])

此方法可以将一维大小为 3 的 ndarray 进行选择性堆叠,在列表中写入 1,2,3 表示将原数组中第一第二第三个数进行指定次数重复堆叠,

ndarray.repeat(int,axis = 0)

此方法可以指定对行间进行指定次数堆叠。同理 axis = 1 时为列间处理。

print(np.tile(np.r_[ndarray_1,ndarray_2)]))#整块repeat
print(np.tile(np.r_[ndarray_1,ndarray_2)],(1,1)))#整块按行列repeat,按行重复1遍,按列重复1遍

此方法可以对其原 ndarray 进行指定次数整体范围的重复的增值操作。
62a2ed0a6c2d4daebe352daf057ef729_.PNG