【问题标题】:How to operate logic operation of all columns of a 2D numpy array如何对 2D numpy 数组的所有列进行逻辑运算
【发布时间】:2017-04-17 01:26:39
【问题描述】:

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

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

生成包含逻辑或所有列的1D 数组(如[True, False])的有效方法是什么?

我在网上搜索,发现有人提到sum(axis=) 来计算sum

不知道有没有类似的逻辑运算方式?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    是的,有。使用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
    

    【讨论】:

    • 看起来您忘记在示例中包含 bb = np.array([[True, True],[False, False], [True, False]])
    【解决方案2】:

    NumPy 还有一个reduce 函数,它类似于Python 的reduce。可以将它与 NumPy 的 logical operations 一起使用。例如:

    >>> 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])
    

    reduce 的想法是它累积地将一个函数(在我们的例子中为 logical_orlogical_and)应用于每一行或每一列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 2016-10-21
      • 2014-01-25
      • 2011-03-25
      • 2018-01-13
      • 2021-05-18
      • 2015-12-28
      • 1970-01-01
      相关资源
      最近更新 更多