Numpy是python中的一个运算速度非常快的一个数学库,它非常重视数组,它允许你在python中进行向量和矩阵计算,并且由于许多底层函数实际上是C编写的,因此你可以体验在原生永远无法体验的速度
数组基础
创建一个数组
Numpy围绕这些称为数组的事物展开,实际上它被称之为ndarrays
以上代码显示了创建数组的4种不同方法,最基本的方法是将序列传递给Numpy的array()函数,可以传递任何序列(类数组),而不仅仅是常见列表(list)数据类型
上面数组的示例是如何使用Numpy表示向量,接下来是使用多维数组表示矩阵和更多的信息
这段代码打印出了矩阵a中第3行(索引为2) 第5列 (索引为4)的元素值,在python中,数组的索引从0开始,所以[2, 4]表示矩阵中的第3行第5列的元素值,这里的值是25
综上所述,这段代码创建了一个二维数组,并且打印出了该数组中特定位置得元素值
多维数组切片
切片多维数组比1D数组复杂一点,并且在使用Numpy时也会经常需要使用到
通过对每个逗号分隔得维度执行单独的切片,因此,对于2D数组,我们的第一片定义了行的切片,第二片定义了列的切片
只需要输入数字就可以指定行或列,上面的第一个示例从数组中选择第0列
下面的图说明了给定的示例切片是如何工作的
数组属性
在使用Numpy时,你会想知道某些信息,这个包里面包含了很多的便捷方法
打印出数组a的形状,即它有几行几列,结果为(5,5),表示a是一个5行5列的二维数组
打印出a中元素的数据类型,结果为init32,表示a中的元素类型是32位
打印出a中元素的总数目,结果为25
打印出a中每个元素所占用的字节数,结果为4,表示每个元素占用4个字节
打印出数组a占用的总字节数,结果为100,表示占用了100个字节,25个元素,每个元素4个字节
使用数组
基本操作符
只是能够从数组中创建和检索元素和属性不能满足需求,有时也需要对它们进行数学运算。
完全可以使用四则运算符+,-,/, *来完成运算操作
除了dot(0之外,这些操作符都是对数组进行逐元素运算,比如(a, b, c) + (d, e, f)的结果就是(a+d, b+e, c+f)它将分别对一个元素进行配对,然后对他们进行运算,返回的结果是一个数组,注意,当使用逻辑运算符如'<'和'>'的时候,返回的将是一个布尔型数组
dot()函数计算两个数组的点积,返回的是一个标量(只有大小没有方向的一个值)而不是数组
索引进阶
花式索引
花式索引是获取数组中我们想要的特定元素的有效方法
第一行代码是,从0开始,以步长为10递增的数字,知道小于100为止
第二行就是创建了一个包含索引的列表indices,列表中指定了数组a中选择元素的位置,即选择索引为1,5和-1的元素
第三行值将这些索引的数据保存到b中
输出结果为
布尔屏蔽
布尔屏蔽是一个有用的功能,它允许我们根据指定的条件检索数组中的元素
上面的示例显示了如何进行布尔屏蔽,你索要做的就是将数组传递给涉及数组的条件,它将为你提供一个值的数组,为该条件返回true
利用这些条件来选择图上的不同点,蓝色点(在图中还包括绿点,但绿点掩盖了蓝色点),显示大于0的所有点,绿点表示值大于0且小于一半π的所有点
缺省索引
不完全索引是从多维数组的第一个维度获取索引或切片的一种方便方法,例如,数组a=[1,2,3,4,5],[6,7,8,9,10],那么[3]将在数组的第一个维度中给出索引为3的元素,这里的值是4
Where函数
where()函数是一另外一个根据条件返回数组中的值的有效方法,只需要把条件传递给这个函数,就会返回一个使得到条件为真的列表
输出结果
1:这行代码使用Numpy的arange()函数创建了一维数组,包含0开始,每隔10个数增加一次的整数序列,最大值为90
2:这行代码使用了where函数返回了一个包含小于50的索引数组b,该函数检查每个数组元素,如果该元素小于,则将其对应的索引添加到数组b中,因此这个例子中,数组b包含了0-4的整数,表示原始数组中小于50的5个元素的索引
3:这行代码与上面的语句类似,[0]是为了排除返回元组的第二个元素,因此,在这个例子中,数组c包含了5-9的整数,表示原始数组中大于等于50的元素索引