python数据分析numpy基础之布尔数组方法sum和any和all

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])
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值