1 python数据分析numpy基础之布尔数组方法sum和any和all
在前面文章介绍的sum、mean、std等统计方法中,布尔值True被转为1,False被转为0。而any和all,则将非0转为True,0转为False。
1.1 sum()
python的numpy库的sum()函数,用于对数组沿指定轴的元素求和。如果是布尔数组,则True为1,False为0.
用法
numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)
描述
数组的布尔矢量化计算,可以将满足条件的元素转为True,否则为False,再通过np.sum()获取满足条件的元素的个数。
>>> import numpy as np
>>> ar=np.random.randn(15)
>>> ar
array([ 0.82538597, -0.32234141, 0.06807463, -1.14954642, 1.77798786,
-0.0619438 , -0.26619313, -0.1581929 , -0.28545853, -0.08926111,
-0.04086482, 1.52881194, 1.17785677, -2.82809615, -0.31513257])
>>> ar>0
array([ True, False, True, False, True, False, False, False, False,
False, False, True, True, False, False])
# np.sum(ar>0)中,True转为1,False转为0,求大于0的元素个数
>>> np.sum(ar>0)
5
>>> ar<0
array([False, True, False, True, False, True, True, True, True,
True, True, False, False, True, True])
# np.sum(ar<0)中,True转为1,False转为0,求小于0的元素个数
>>> np.sum(ar<0)
10
1.2 any()
python的numpy库的any()函数,用于测试数组沿指定轴是否存在True,存在则返回True,否则返回False。any()用于非布尔数组时,非0转为True,0转为False。
用法
numpy.any(a, axis=None, out=None, keepdims=<no value>, *, where=<no value>)
描述
a:必选,为数组或者列表或者元组;
axis:可选,用于指定要测试的数组轴,为整数,范围[0, ndim)。默认为None,转为一维数组后进行测试。
若axis=n为整数,则对沿指定轴n的每个元素的测试是否存在True。
若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。
>>> import numpy as np
>>> bools=np.array(np.random.randn(24)>0).reshape(2,3,4)
>>> bools
array([[[ True, True, True, False],
[ True, False, True, False],
[False, True, False, False]],
[[ True, False, True, False],
[False, False, True, False],
[False, False, True, False]]])
# axis默认None,转为一维数组后存在True则返回True,否则返回False
>>> np.any(bools)
True
# axis=0,沿0轴存在True则返回True,否则返回False
>>> np.any(bools,axis=0)
array([[ True, True, True, False],
[ True, False, True, False],
[False, True, True, False]])
# axis=1,沿0轴存在True则返回True,否则返回False
>>> np.any(bools,axis=1)
array([[ True, True, True, False],
[ True, False, True, False]])
# axis=2,沿0轴存在True则返回True,否则返回False
>>> np.any(bools,axis=2)
array([[ True, True, True],
[ True, True, True]])
# 若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推
>>> np.any(bools,axis=-1)
array([[ True, True, True],
[ True, True, True]])
>>> ar2=np.array([[-1,2,0],[0,-5,0]])
>>> ar2
array([[-1, 2, 0],
[0, -5, 0]])
# any()用于非布尔数组,非0为True,0为False
>>> np.any(ar2,axis=0)
array([ True, True, False])
1.3 all()
python的numpy库的all()函数,用于测试数组沿指定轴是否存全部为True,全部为True则返回True,否则返回False。all()用于非布尔数组时,非0转为True,0转为False。
用法
numpy.all(a, axis=None, out=None, keepdims=<no value>, *, where=<no value>)
描述
a:必选,为数组或者列表或者元组;
axis:可选,用于指定要测试的数组轴,为整数,范围[0, ndim)。默认为None,转为一维数组后进行测试。
若axis=n为整数,则对沿指定轴n的每个元素测试,是否全部都为True。
若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。
>>> import numpy as np
>>> bools=np.array(np.random.randn(24)>0).reshape(2,3,4)
>>> bools
array([[[ True, True, False, False],
[ True, True, True, False],
[False, False, False, False]],
[[ True, True, False, False],
[False, True, False, False],
[False, False, True, True]]])
# axis默认None,转为一维数组后全部为True则返回True,否则返回False
>>> np.all(bools)
False
# axis=0,沿0轴全部为True则返回True,否则返回False
>>> np.all(bools,axis=0)
array([[ True, True, False, False],
[False, True, False, False],
[False, False, False, False]])
# axis=1,沿1轴全部为True则返回True,否则返回False
>>> np.all(bools,axis=1)
array([[False, False, False, False],
[False, False, False, False]])
# axis=2,沿2轴全部为True则返回True,否则返回False
>>> np.all(bools,axis=2)
array([[False, False, False],
[False, False, False]])
# 若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推
>>> np.all(bools,axis=-1)
array([[False, False, False],
[False, False, False]])
>>> ar2=np.array([[-1,2,0],[-3,-5,1]])
>>> ar2
array([[-1, 2, 0],
[-3, -5, 1]])
# all()用于非布尔数组,非0为True,0为False
>>> np.all(ar2,axis=0)
array([ True, True, False])