首页 文章

如何计算NumPy bool数组中真实元素的数量

提问于
浏览
126

我有一个布尔类型的NumPy数组'boolarr' . 我想计算其值为 True 的元素数量 . 是否有专门用于此任务的NumPy或Python例程?或者,我是否需要迭代脚本中的元素?

4 回答

  • 185

    这个问题为我解决了一个非常相似的问题,我认为我应该分享:

    在原始python中,您可以使用sum()来计算dict中的True值:

    >>> sum([True,True,True,False,False])
    3
    

    但这不起作用:

    >>> sum([[False, False, True], [True, False, True]])
    TypeError...
    

    也许这会对某人有所帮助 .

  • 3

    在比较两个numpy数组和计算匹配数(例如机器学习中的正确类预测)方面,我发现以下两个维度的例子很有用:

    import numpy as np
    result = np.random.randint(3,size=(5,2)) # 5x2 random integer array
    target = np.random.randint(3,size=(5,2)) # 5x2 random integer array
    
    res = np.equal(result,target)
    print result
    print target
    print np.sum(res[:,0])
    print np.sum(res[:,1])
    

    可以扩展到D维度 .

    结果是:

    预测:

    [[1 2]
     [2 0]
     [2 0]
     [1 2]
     [1 2]]
    

    目标:

    [[0 1]
     [1 0]
     [2 0]
     [0 0]
     [2 1]]
    

    D = 1的正确预测计数: 1

    D = 2的正确预测计数: 2

  • 3

    你有多种选择 . 以下两个选项 .

    numpy.sum(boolarr)
    numpy.count_nonzero(boolarr)
    

    这是一个例子:

    >>> import numpy as np
    >>> boolarr = np.array([[0, 0, 1], [1, 0, 1], [1, 0, 1]], dtype=np.bool)
    >>> boolarr
    array([[False, False,  True],
           [ True, False,  True],
           [ True, False,  True]], dtype=bool)
    
    >>> np.sum(boolarr)
    5
    

    当然,这是一个 bool 特定的答案 . 更一般地说,您可以使用 numpy.count_nonzero .

    >>> np.count_nonzero(boolarr)
    5
    
  • 23

    如果您希望按行计数,请将 axis=1 提供给 sum

    In [345]: boolarr
    Out[345]: 
    array([[False, False,  True],
           [ True, False,  True],
           [ True, False,  True]], dtype=bool)
    
    In [346]: boolarr.sum(axis=1)
    Out[346]: array([1, 2, 2])
    

    同样,使用 np.count_nonzero

    In [348]: np.count_nonzero(boolarr, axis=1)
    Out[348]: array([1, 2, 2])
    

相关问题