目录
概述:Numpy是什么?
NumPy是使用Python进行科学计算的基础软件包。包含了以下内容:
- 一个强大的N维数组对象。
- 复杂的(广播)功能。
- 用于集成C / C ++和Fortran代码的工具。
- 有用的线性代数,傅里叶变换和随机数功能。
一、ndarray基础知识
(一)各重要属性
Numpy的数组类为ndarray,别名为array,但这里的numpy.array与Python库z中的array.array不同,后者只处理一维数组且仅提供较少的功能,ndarray对象更重要的属性有以下几点:
- ndarray.ndim - 数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。
- ndarray.shape - 数组的维度。对于有 n 行和 m 列的矩阵,shape 将是 (n,m)。因此,shape 元组的长度就是rank或维度的个数 ndim。
- ndarray.size - 数组元素的总数。这等于 shape 的元素的乘积。
- ndarray.dtype - 一个描述数组中元素类型的对象。例如numpy.int32、numpy.int16和numpy.float64。
- ndarray.itemsize - 数组中每个元素的字节大小。它等于 ndarray.dtype.itemsize 。
- ndarray.data - 该缓冲区包含数组的实际元素。
如下,代码演示说明
(二)数组的创建
- 通过arrary函数创建,其类型由其中元素的类型推导出来
可以将序列的序列转换为二维数组,当然也可将序列的序列的序列转换为三维数组
可以在创建时通过dtype参数指定数组的类型:
- zeros()、noes()、empty()函数。函数zeros创建一个由0组成的数组,函数ones创建一个完整的数组,函数empty 创建一个数组,其初始内容是随机的,取决于内存的状态。其类型默认下为float64类型
- ndarray提供了一个与range()类似的函数arange(),该函数返回一个数组
- 因为有限的浮点精度,arange与浮点参数一起使用时,通常不可预测所获得的元素的数量,所以通常最好使用linspace函数来接收我们想要的元素数量的函数,而不是步长(step)
(三)打印数组
可以将一维数组打印为行,二维数组打印为矩阵,三维数组打印为矩数组表。
(四)基本操作
- +、-、*、/ 算术运算
如图示,数组的算术运算会应用到元素级别
- *=、+=等运算会直接更改被操作的数组而不会创建新的数组(当不同类型的数组进行操作时,其结果数组类型会对应更精确的类型,即向上转换)
- 聚合功能,numpy提供了许多其他的函数供我们使用,如min、max、sum、mean等等
图示:
- 我们可以通过指定axis参数,使数组沿指定轴操作
(五)通函数(ufunc)
NumPy提供熟悉的数学函数,例如sin,cos和exp。在NumPy中,这些被称为“通函数”(ufunc)。在NumPy中,这些函数在数组上按元素进行运算,产生一个数组作为输出。
(六)切片/索引
1.简单切片与索引
一维数组可以进行索引、切片、迭代操作和列表等其他Python序列类型一样。
多维数组的每个轴可以有一个索引,这些索引以逗号隔开的元组出现
当提高的索引少于轴的数量时,缺失的索引被认为是完整的切片,如下,其 -1 后被视为紧跟着" : "的多个实例,用于表示剩余轴,NumPy也允许写为b[-1,…]
对多维数组迭代是相对于第一条轴完成的
可以使用flat属性,对数组中的所有元素进行迭代
2.花式索引
使用索引数组进行索引
使用布尔数组进行索引
二、修改数组的形状
一个数组的形状是由每个轴的元素的数量决定的
但是我们可以通过命令修改它们的形状。ravel()、reshape()、T三个命令都会返回一个数组,不会修改原有数组。
resize方法会修改数组本身
在 reshape 方法中将 size 指定为-1,系统会自动计算其他的 size 大小
三、数组的拷贝及视图
简单分配不会复制数组对象或其数据
浅拷贝或视图
使用copy()函数生成数组及数据的完整副本
生活中,我们可能不需要原始数据,只要其中一小部分,那么我们可以对其切片后再调用copy()函数
四、广播
广播允许通用功能以有意义的方式处理不具有完全相同形状的输入。
广播的第一个规则是,如果所有输入数组不具有相同数量的维度,则将“1”重复地预先添加到较小数组的形状,直到所有数组具有相同数量的维度。
广播的第二个规则确保沿特定维度的大小为1的数组表现为具有沿该维度具有最大形状的数组的大小。假定数组元素的值沿着“广播”数组的那个维度是相同的。
实例:a和b是不同形状的数组,a+b最后正常输出
结语
大体梳理了一下NumPy的基础使用知识,有需要进阶的朋友可阅读参考资料,本文中实例均来源于NumPy官方文档,全部敲一遍和全部看一遍效果是不一样的(建议代码全敲一遍!建议代码全敲一遍!建议代码全敲一遍!),敲一遍印象更加深刻和理解更为透彻,截图为笔者在Anaconda3的JupyterNotebook上的运行结果,最后说一句,能看到这的朋友,是看完了全文的并敲完了实例的,大家要一起加油学习哦
参考资料:
NumPy中文官方文档
NumPy和数据表示的视觉介绍