可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用。
这里,我生成了一些正态分布随机数据,然后做了聚类统计:
arr = np.random.randn(5, 4)arroutarray([[-2.20989118, -1.13463825, -0.40767054, -1.60340629], [ 0.29052271, 0.36493702, 2.06118911, 0.27024226], [-0.74660136, 1.34022012, 0.38593506, 0.53011446], [ 0.20382936, 0.23006079, 0.88606943, -0.13498925], [-2.58674885, 1.14521726, 1.5540136 , -0.34903921]])********************************************************arr.mean()out0.004468312999759347********************************************************np.mean(arr)out0.004468312999759347********************************************************arr.sum()out0.08936625999518694********************************************************arr.mean(axis=1)outarray([-1.33890157, 0.74672278, 0.37741707, 0.29624259, -0.0591393 ])********************************************************arr.sum(axis=0)outarray([-5.04888931, 1.94579695, 4.47953666, -1.28707804])
这里,arr.mean(1)是“计算行的平均值”,arr.sum(0)是“计算每列的和” 其他如cumsum和cumprod之类的方法则不聚合,而是产生一个由中间结果组成的数组:
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])arr.cumsum()outarray([ 0, 1, 3, 6, 10, 15, 21, 28], dtype=int32)
在多维数组中,累加函数(如cumsum)返回的是同样大小的数组,但是会根据每个低维的切片沿着标记轴计算部分聚类
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])arroutarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) ***************************************************arr.cumsum(axis=0)outarray([[ 0, 1, 2], [ 3, 5, 7], [ 9, 12, 15]], dtype=int32) ***************************************************arr.cumprod(axis=1)#np.cumprod 所有元素累积积outarray([[ 0, 0, 0], [ 3, 12, 60], [ 6, 42, 336]], dtype=int32)
在上面这些方法中,布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:
arr = np.random.randn(100)(arr > 0).sum()out49
另外还有两个方法any和all,它们对布尔型数组非常有用。any用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True
bools = np.array([False, False, True, False])bools.any()outTrue****************************************bools.all()False
这两个方法也能用于非布尔型数组,所有非0元素将会被当做True
下期我们将分享Numpy中的排序方法,如果喜欢请点赞收藏,您的支持是我最大的动力,谢谢大家,共同进步。