检测是否有任何值大于零并进行更改

时间:2019-07-10 00:14:05

标签: python numpy

我有以下数组:

<section class="thimble" style="background-image: url(assets/img/art-arts-and-crafts-bright-colours-2564890.jpg)">
  <div class="thimble-content-area">
    <h1>Rachel Doyles Studio</h1>
  </div>
</section>

如果任何元素包含True,则它们都应为true。因此,以上内容应变为:

[(True,False,True), (False,False,False), (False,False,True)]

我下面的代码尝试这样做,但是它只是将所有元素都转换为True:

[(True,True,True), (False,False,False), (True,True,True)]

输出为:

a = np.array([(True,False,True), (False,False,False), (False,True,False)], dtype='bool')
aint = a.astype('int')
print(aint)
aint[aint.sum() > 0] = (1,1,1)
print(aint.astype('bool'))

4 个答案:

答案 0 :(得分:2)

您可以尝试np.anytests whether any array element along a given axis evaluates to True

下面是使用清单推导来获得预期结果的快速代码。

lst = [(True,False,True), (False,False,False), (False,False,True)]
result = [(np.any(x),) * len(x) for x in lst]

# result is [(True, True, True), (False, False, False), (True, True, True)]

答案 1 :(得分:0)

我不是numpy向导,但这应该返回您想要的内容。

import numpy as np

def switch(arr):
    if np.any(arr):
        return np.ones(*arr.shape).astype(bool)
    return arr.astype(bool)

np.apply_along_axis(switch, 1, a)

array([[ True,  True,  True],
       [False, False, False],
       [ True,  True,  True]])

答案 2 :(得分:0)

ndarray.anyaxis=1np.tile一起完成工作

np.tile(a.any(1)[:,None], a.shape[1])

array([[ True,  True,  True],
       [False, False, False],
       [ True,  True,  True]])

答案 3 :(得分:0)

根据原始数组的第二维创建一个True数组,并将其分配给其中所有带有True的行。

>>> a
array([[ True, False,  True],
       [False, False, False],
       [False,  True, False]])

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

依靠Broadcasting