3.1.3-NumPy数组基本操作.md

3.1.3 NumPy数组基本操作

Numpy数组基本操作是指在已创建的数组上完成元素访问、区域提取与数值计算,核心包括索引、切片和运算。通过索引访问数组元素的方法与Python访问可迭代对象的方法相同,有正索引和负索引两种。例如执行a = np.arange(8).reshape(2, 4)后,a[0][-1]取出第0行最后一个元素,结果为3。

切片用于截取子数组,与Python可迭代对象切片有三点不同。第一,二维及以上数组可对每个轴切片。设a = np.arange(12).reshape(3, 4),则a[1:3]按行切片,a[:,1:3]用冒号指定所有行后按列切片,a[1:3,1:3]同时对行和列切片,a[1,2]可简化为对一个元素的访问,结果为6。第二,支持布尔索引:用元素是布尔值的数组或列表进行索引,选出索引值为真的元素并生成新数组;也可用数组运算,如a[a>3]选出大于3的元素。第三,numpy引入了视图。视图是共享相同数据的不同数组对象,可避免不必要的数据复制、节省内存;对视图中元素的修改会直接影响原数组,反之亦然。例如b = a[1:4]后令b[0] = -1,原数组对应位置同步变为-1。尽管视图由切片产生并与原数组共享数据,它们仍是独立对象,各自有自己的维度、形状、大小等属性。

运算包括数组与数的运算以及数组与数组的运算。数组与数运算时,每一个元素会与该数运算,结果保存到新数组,原数组保持不变;数组也可以与数比较,结果是布尔数组。数组与数组运算要求两数组形状相同,对应位置上的元素之间执行相应运算,如np.arange(1,4) * np.arange(4,7)得到array([4, 10, 18])。易错点:不要把切片结果当成拷贝,修改视图会改写原数组;布尔索引和算术运算会生成新数组,不会改写原数组;形状不同的两数组不能按本节对应位置规则直接运算。

关键要点

下载此文件