python数据分析工具 | numpy

 

 

Python中没有提供数组功能,虽然列表可以完成基本的数组功能,但并不是真正的数组,而且在数据量较大时,使用列表的速度回非常慢。因此,Numpy提供了真正的数组功能,以及对数据进行快速处理的函数。Numpy内置函数处理数据的速度是C语言级别的,因此,尽量使用其内置函数。

Numpy安装

Numpy安装和普通的第三方库安装一样,最常用的就是利用 pip 安装:

pip install numpy

如果你想做数据分析的话,还是建议安装 anaconda(Windows、macOS、Linux均可使用) ,它是一个集成环境,包含了conda、Python在内的超过180个科学包及其依赖项,几乎所有你用到的库都已经帮你安装好了,同时如果需要其他的第三方库要安装,可以使用其中的 conda 便捷的安装相应库以及依赖。

 

Numpy基本操作

基本属性

numpy包含很多自己的属性和方法,下面通过一个栗子说明一下几个它自身的重要属性。

 

 

创建数组

import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6]])  # 创建二维数组

上面是最基本的创建数组方法,但是对于实际应用中,它内置的一些函数更为实用。例如:

 

 

下面举例展示一下其中部分用法:

 

基本操作

Numpy的一个显著特点就是它的矢量化,使得对其操作是面向整个数组而不是各个元素,这就省去了很多开销,具体实现交给更加高效的C来做。矢量化对每个元素执行相同的操作,例如常见的加减乘除等。

 

 

特殊的,numpy中的“*”是数乘(按元素运算),矩阵乘法用dot函数来表示,表示为 c.dot(d)。

numpy还有很多常用的内置方法,例如求和等。

import numpy as np
np.random.random((2, 3))  # 创建一个元素值为0-1之间的随机数的 2*3 的矩阵
data = np.array([2, 3, 4, 6, 1, 7, 9])
data.sum()  # 求数组所有元素的和
data.max()  # 求数组中最大值
data.min()  # 求数组中最小值
# 除此之外还包括下面这些常用函数
# prod 积  mean 平均数  std 标准差  var 方差  argin 最小值索引  argmax 最大值索引  median 中位数  any 至少一个为真  all 所有元素为真

 

上述操作的对象为一维数组,那么对于二维或者多维数组来说,也有一些常用的操作。多维数组可以通过手动创建(np.array),或者通过内置函数设置数组结果(np.zeros等),除此之外还有一个特殊的方法,就是利用 reshape 修改数组的结构。上述的求和,求极值等方法在多维数组中也可以通过设置 axis 参数来灵活操作。axis表示多维数组中的轴。

 

说到 reshape ,那就集中说一下数组的变形

data.reshape((x, y))  # 将原数组变为x行y列
data.resize((x, y))   # resize与reshape不同之处在于,resize改变数组本身
data.ravel()          # 将多维数组展平为一维
data.T                # 将数组转

 

数组的索引切片。至于索引切片操作,其实是和python中的列表一致的,不赘述。

data[x:y:z]  # 表示从下标 x 到 y-1 中按步长 z 取元素

 

广播也是numpy中常用的知识。

广播(Broadcasting)规则

广播允许通用功能以有意义的方式处理不具有完全相同形状的输入。

广播的第一个规则是,如果所有输入数组不具有相同数量的维度,则将“1”重复地预先添加到较小数组的形状,直到所有数组具有相同数量的维度。

广播的第二个规则确保沿特定维度的大小为1的数组表现为具有沿该维度具有最大形状的数组的大小。假定数组元素的值沿着“广播”数组的那个维度是相同的。

                                               --引自Numpy中文网(https://www.numpy.org.cn/)

 

也许比较抽象,画图说明一下。

 

图中A为2*3的矩阵,B是一维的,若要相加必须调整为相同结构。根据第一条规则,在左侧再添加维度得B(1,3),根据规则二,将对应维度上的元素为一的补齐,则完全复制一份B拼接在下面,形成维度相同的两个矩阵再进行相加运算。若将所有大小为1的维度补齐后,两数组仍维度不同,那么不能进行计算。给个例子大家可以琢磨一下:A(2,5),B(3),最终column分别为5和3,则维度不同。

 

posted @ 2020-03-08 15:35  小田学Python  阅读(686)  评论(0编辑  收藏  举报