目录
Numpy概述
Numpy是什么,Numpy是一个开源的Python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作,对于同样的数值计算任务,使用NumPy不仅代码要简洁的多,而且NumPy的性能远远优于原生Python,基本是一个到两个数量级的差距,而且数据量越大,NumPy的优势就越明显。
Numpy最为核心的数据类型是ndarray,使用ndarray可以处理一维、二维和多维数组,该对象相当于是一个快速而灵活的大数据容器。
NumPy底层代码使用C语言编写,解决了GIL的限制,ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作速度很快,远远优于python中的list。
另一方面ndarray对象提供了更多的方法来处理数据,尤其是和统计相关的方法,这些方法也是python原生的list没有的。
Python中的数组
在python中,我们常用list和tuple等数据结构表示数组,也或者使用array模块(非内置模块)表示数组。但是array提供的函数并不丰富,而且它也不支持多维数组,所以在丰富的数据分析中这是无法满足的。但是好在NumPy可以为我们提供帮助。
NumPy中的ndarray
1. NumPy中的核心数据结构
2. 所有元素是同一种类型
3. 别名array(数组)
4.节省内存,提高CPU计算时间,有丰富的函数
5. NumPy的思维模式是面向数组
ndarray中的数据类型
ndarray多维数组属性
1. 数组下标都是从0开始
2. 同一个ndarray数组中的所有元素的类型必须相同
3. 秩(rank)即维数,一维数组的秩为1,二维数组的秩为2,以此类推
4. 轴(axis):每一个线性的数组称为是一个轴,也就是维度(dimensions)。比如,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组,所以一维数组就是ndarray中的轴,第一个轴(也就是第0轴)相当于是底层数组,第二个轴(也就是第1轴)是底层数组里的数组
很多时候可以声明axis。axis=0,表示沿着第0轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作
NumPy 的数组中比较重要 ndarray 对象属性如下:
看了这些属性,我们也不知道是啥意思,那么下面以一个4*4的数组为例子:
从图中我们可以看出,一维为第0轴(列),二维为第1轴(行)。下面我们通过代码表示出来如下:
ndarray的创建
ndarray的创建方法如下:
1. 从python的基础数据对象转化
2. 通过numpy内置函数生成
3. 从硬盘(文件)中直接读取
常见的创建函数如下:
那么总结了多函数,也不如来个实际的例子舒服:
NumPy 切片和索引
1. ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
2. ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组
3.冒号分隔切片参数 start:stop:step 来进行切片操作
4.切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray
例子如下:
NumPy 线性代数
NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能,如下:
代码如下:
总结
numpy库主要用于处理ndarray,也就是多维数组,而且在实际应用中需要的各种功能基本上都有,使用时只需要调用相应的接口函数即可。如果想了解更多numpy的使用,请看Numpy教程