如何对2D numpy数组的所有列进行逻辑运算操作

23

假设我有以下由四行三列组成的NumPy二维数组:

>>> a = numpy.array([[True, False],[False, False], [True, False]])
>>> array([[ True, False],
       [False, False],
       [ True, False]], dtype=bool)

如何高效生成一个包含所有列逻辑或(例如 [True, False])的 1D 数组?

我搜索了网络并发现有人提到使用 sum(axis=) 来计算总和。

我想知道是否有类似的方法来进行逻辑操作?

2个回答

28

有的。使用 any

>>> a = np.array([[True, False],[False, False], [True, False]])
>>> a
array([[ True, False],
       [False, False],
       [ True, False]], dtype=bool)
>>> a.any(axis=0)
array([ True, False], dtype=bool)

注意当你将参数axis更改为1时会发生什么:

>>> a.any(axis=1)
array([ True, False,  True], dtype=bool)
>>> 

如果想要逻辑与操作,请使用all

>>> b.all(axis=0)
array([False, False], dtype=bool)
>>> b.all(axis=1)
array([ True, False, False], dtype=bool)
>>> 

还需注意,如果省略axis关键字参数,它将在每个元素上执行操作:

>>> a.any()
True
>>> a.all()
False

2
看起来你在例子中忘记包含 b 了:b = np.array([[True, True],[False, False], [True, False]]) - Georgy

6

NumPy还有一个reduce函数,类似于Python的reduce函数。它可以与NumPy的逻辑运算一起使用。例如:

>>> a = np.array([[True, False],[False, False], [True, False]])
>>> a
array([[ True, False],
       [False, False],
       [ True, False]])
>>> np.logical_or.reduce(a)
array([ True, False])
>>> np.logical_and.reduce(a)
array([False, False])

它还有一个axis参数:

>>> np.logical_or.reduce(a, axis=1)
array([ True, False,  True])
>>> np.logical_and.reduce(a, axis=1)
array([False, False, False])
< p > reduce 的思想是将一个函数(在我们的例子中是 logical_or 或者 logical_and)逐行或逐列地累加应用到数据上。 < /p >

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接