【问题标题】:Most efficient (and pythonic) way to count False values in 2D numpy arrays?在 2D numpy 数组中计算 False 值的最有效(和 Pythonic)方法?
【发布时间】:2016-07-27 23:51:39
【问题描述】:

我正在尝试计算 np.array 中的 False 值,如下所示:

import numpy as np
a = np.array([[True,True,True],[True,True,True],[True,False,False]])

我通常使用这种方法:

number_of_false=np.size(a)-np.sum(a)

有没有更好的办法?

【问题讨论】:

  • 如何使用numpy.count_nonzero
  • @AnttiHaapala 使用 numpy.sum 是否相同?数数是真的

标签: python numpy boolean


【解决方案1】:

使用count_nonzero 计算非零(例如不是False)值:

>>> np.size(a) - np.count_nonzero(a)
2

【讨论】:

  • 是的,但这与我或多或少使用的解决方案不同?
  • 从我的小基准来看,在那个数量级上。 :)
【解决方案2】:

更清楚的肯定是问到底需要什么,但这并不意味着它是最有效的:

在建议的答案中使用jupyter 中的%%timeit 和python 2.7 会明显胜出:

    seq = [[True, True, False, True, False, False, False] * 10 for _ in range(100)]
    a = np.array(seq)

    np.size(a) - np.count_nonzero(a) 1000000 loops, best of 3: 1.34 µs per loop  - Antti Haapala
    (~a).sum()                        100000 loops, best of 3: 18.5 µs per loop  - Paul H
    np.size(a) - np.sum(a)             10000 loops, best of 3: 18.8 µs per loop  - OP
    len(a[a == False])                 10000 loops, best of 3: 52.4 µs per loop
    len(np.where(a==False))            10000 loops, best of 3: 77 µs per loop    - Forzaa
.

明显的赢家是 Antti Haapala,在一个数量级上,np.size(a) - np.count_nonzero(a)

len(np.where(a==False)) 似乎受到数组嵌套结构的惩罚;一维数组上的相同基准给出10000 loops, best of 3: 27 µs per loop

【讨论】:

  • 顺便说一句:a.sizenp.size(a) 快约 10 倍。基准测试的替代方案可能是np.count_nonzero(~a),不过这不是最有效的。
【解决方案3】:

这样可以:

len(np.where(a==False))

也许还有其他更快或更好看的方法。

【讨论】:

    【解决方案4】:

    另一种选择是:

    np.bitwise_not(a).sum()
    

    更短,但可能不太清楚的是:

    (~a).sum()
    

    【讨论】:

      【解决方案5】:

      计算错误比较的次数

      number_of_false = np.size(out_putArray) - np.count_nonzero(out_putArray[0] >= out_putArray[1])
      

      真比较的计数

      number_of_true = np.count_nonzero(out_putArray[0] >= out_putArray[1])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        • 2019-07-31
        • 2013-12-05
        • 2021-11-24
        相关资源
        最近更新 更多