Numpy:按列折叠数组

Numpy: Folding an array column-wise

我有一个 n 维布尔 numpy 数组。如何在每列之间应用逻辑 AND 运算。我想获取仅包含行的行数。

示例:

n = np.array([[0, 0],
              [1, 0],
              [1, 1],
              [0, 1],
              [1, 0],
              [0, 0],
              [1, 1]]
              )

这里,结果应该是2,因为只有第三行和最后一行只包含1。

这可以通过 functools 模块完成:

from functools import reduce
np.sum(reduce(np.logical_and, n.T))

但是有没有办法只用 numpy 来做到这一点?

您可以使用 .all(1) 检查每一行的 and 然后使用 np.sum() 进行计数,如下所示:

>>> res = n.all(1)
>>> res
array([False, False,  True, False, False, False,  True])

>>> res.sum()
2

一种可能的解决方案,仅使用 Numpy 是:

np.sum(np.equal(n, 1).all(axis=1))