【问题标题】:Python: Adding boolean Numpy arraysPython:添加布尔 Numpy 数组
【发布时间】:2013-08-07 21:25:39
【问题描述】:

我有三个这样的列表:

a = np.array([True, True, False, False])
b = np.array([False, False, False, False])
c = np.array([False, False, False, True])

如果所有对应的元素都是False,我想添加数组以便新数组只有False。例如,输出应该是:

d = np.array([True, True, False, True])

但是,d = np.add(a,b,c) 返回:

d = np.array([True, True, False, False])

为什么会这样,我该如何解决?谢谢!

【问题讨论】:

    标签: python numpy boolean


    【解决方案1】:

    np.add 的第三个参数是一个可选数组,用于将输出放入其中。该函数只能添加两个数组。

    只需使用普通运算符(也许切换到按位逻辑运算符,因为您尝试执行布尔逻辑而不是加法):

    d = a | b | c
    

    如果您想要可变数量的输入,可以使用any 函数:

    d = np.any(inputs, axis=0)
    

    【讨论】:

    • 添加布尔数组不会产生整数数组,您需要为此手动转换。
    • 什么……嗯。你说得对。我可以发誓它做到了。固定。
    【解决方案2】:
    >>> a=[True, True, False, False]
    >>> b=[False, False, False, False]
    >>> c=[False, False, False, True]
    >>> map(sum, zip(a,b,c))
    [1, 1, 0, 1]
    >>>
    

    【讨论】:

    • 这对我来说效果最好,因为我可以传递可变数量的数组来加起来。 IE。 map(bool,map(sum, zip(*X))) 其中X = [a,b,c,...]。谢谢!
    • @JoeFlip:这是使用列表而不是 numpy 数组。性能将下降,广播语义将消失,切片将无法正常工作。 np.any 是更好的选择。
    【解决方案3】:

    也有直接的解决办法

    a + b + c
    

    导致

    array([ True,  True, False,  True], dtype=bool)
    

    【讨论】:

      【解决方案4】:

      我个人使用的是np.logical_and函数。

      针对提出的问题:

      In [3]: a = np.array([True, True, False, False])
         ...: b = np.array([False, False, False, False])
         ...: c = np.array([False, False, False, True])
      
      In [4]: np.logical_and(a,b,c)
      Out[4]: array([False, False, False, False], dtype=bool)
      

      【讨论】:

        猜你喜欢
        • 2016-12-08
        • 2016-03-11
        • 1970-01-01
        • 1970-01-01
        • 2018-05-20
        • 2020-10-23
        • 2020-12-08
        • 1970-01-01
        • 2017-09-24
        相关资源
        最近更新 更多