使用Numpy数组可以使用简单数组表达式而无需写大量循环。这种利用数组表达式来替代显式循环的方法称为向量化。通常向量化会快上一到两个数量级。
将条件逻辑作为数组操作
numpy.where函数是三元表达式x if condition else y的向量化版本
1 | arr1 = np.array([1.1,1.2,1.3,1.4,1.5]) |
这里所作的工作是:当cond里对应的值是True时输出arr1中对应的值,否则arr2。不难发现,np.where的用法实质上和C语言中的三目运算符有点相像
np.where的第二第三个参数也可以是标量。where一个典型用法就是根据一个数组来生成一个新的数组。
1 | arr = np.random.randn(4,4) |
这里做的是负数变-2,正数变2。通过观察不难发现,where第一项为true则执行第二项,否则第三项
数学和统计方法
这里介绍一些关于计算整个数组统计值或关于轴向数据的科学函数,可以作为数组类型的方法被调用。
注意:像mean、sum等函数可以接收一个可选参数axis,可以用于计算定轴上向上的统计值
array.mean(1)表示计算每一列的平均值,arr.sum(0)表示计算行轴向的累和
cumsum和cumprod不会聚合,会产生中间结果,比如:
1 | arr = np.arange(8) |
布尔值数组的方法
可以用sum函数计算布尔数组中true的个数
1 | arr = np.random.randn(100) |
上述程序用于统计随机数中正值的个数
同时还有any和all函数,前者用来检验数组中是否至少还有一个True,而后者用来检验是否每个值都是True。
排序
Numpy数组可以使用sort方法按位置进行排序
可以在多维数组中根据传递的axis值,沿着轴对每个一维数据段进行排序,这里不再举例。
唯一值与其他组合逻辑
Numpy中包含一些针对一维ndarray的基础集合操作。