NumPy函数是对数组进行形状变换、排序与数值计算的接口,使用形式有两种:一种是numpy模块的函数np.函数名(),另一种是numpy数组的成员函数数组对象.函数名()。有一些函数(如reshape())既是numpy模块的函数,又是数组的成员函数,可以通过两种方式使用。例如a = np.arange(8)后,调用np.reshape(a, (2,4))或a.reshape(2,4),都能得到形状为(2, 4)的新数组。
sort()用于对数组a进行原地排序,即直接修改数组本身,使其元素按照升序排列。例如对[40, 7, 8, 48, 13, 49]执行a.sort()后,a变为[7, 8, 13, 40, 48, 49]。NumPy数组没有降序排序的功能,如要实现降序排序,可先sort()再令a = a[::-1]。如果要对二维及以上的数组排序,需要用axis参数指定排序的轴:a.sort(axis=1)按轴1在水平方向上排序,a.sort(axis=0)按轴0在竖直方向上排序。
NumPy用于计算的函数有两类。逐元素操作的函数对数组中的每个元素分别计算,返回一个新数组,不会改变数组的整体结构,如sqrt、sin、cos。例如a = np.array((4,9,16,25)).reshape(2,2)时,np.sqrt(a)得到[[2., 3.], [4., 5.]]。聚合操作将数组中的所有元素进行计算,返回一个标量或指定轴上的累计结果,可以对整个数组或特定轴操作并改变数组的维度,如sum、max。未指定参数时a.sum()对所有元素求和,结果为一个数;a.sum(axis=0)按列求和,a.sum(axis=1)按行求和,结果均为一维数组。
dot()函数用于计算两个数组的点积。对于一维数组,它返回向量的点积(如[1,2,3]与[4,5,6]的点积为32);对于二维数组,它返回矩阵乘积。二维数组与一维数组进行点积,是二维数组的每一行与一维数组进行点积,其结果是一维数组。二维数组与二维数组进行点积,要求第一个数组的列数等于第二个数组的行数。where()函数用于根据条件筛选或生成数组:numpy.where(condition)返回满足条件的元素的索引;numpy.where(condition, x, y)在条件为真时返回x对应的值,否则返回y对应的值,要求x和y与原数组的形状相同。
易错点主要包括:sort()会原地修改原数组;where只传入条件时得到的是索引而不是元素值;把逐元素函数与聚合函数混用;做二维点积时忽略“列数等于行数”这一约束。