使用Numpy数组可以使你利用简单的数组表达式完成多种数据操作任务,而无须写大量的循环操作。这种利用数组表达式来代替显示循环的方法,成为向量化。通常,向量化的数组操作回避纯Python的等价实现在速度上快一到两个数量级(甚至更多)。
numpy.where函数是三元表达式x if condition else y的向量化版本。
实例代码:
np.where的第二个参数和第三个参数并不需要是数组,它们可以是标量。where在数据分析中的一个典型用法是根据一的数组来生成一个新的数组。假设你有一个随机生成矩阵数据,并且你想将其中的正值都替换为2,将所有的负值替换为-2,使用np.where会很容易实现:
你可以使用np.where将标量和数组联合:
许多关于计算整个数组统计值或关于轴向数据的数学函数,可以作为数组类型的方法被调用。你可以使用聚合函数(通常也叫缩减函数),比如sum,mean和std(标准差),既可以直接调用数组实例的方法,也可以使用顶层的Numpy函数。
其他的方法,cumsum,cumprod并不会聚合,他们会产生一个中间结果;在多维数组中,像cumsum这样的累机函数返回相同长度的数组,但是可以在指定轴向根据较低维度的切片进行部分聚合。
方法 | 描述 |
sum | 沿着轴向计算所有元素的累和,0长度的数组,累和为0。 |
mean | 数学平均,0长度的数组平均值为NaN。 |
std, var | 标准差和方差, 可以选择自由度调整(默认分母是n) |
min, max | 最小值和最大值 |
argmin, argmax | 最大值和最小值的位置 |
cumsum | 从0开始元素累积和 |
cumprod | 从一开始元素累计积 |
布尔值会被强制为1和0。因此,sum通常可以用于计算布尔值数组中的True的个数:
对于布尔值数组,有两个非常有用的方法any和all。any()检查数组中是否至少有一个True,而all()检查是否每个都是True,这些方法也可适用于非布尔值数组,所有非0元素都会按True处理。