我有以下数组:
<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'))
答案 0 :(得分:2)
您可以尝试np.any
,tests 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.any
和axis=1
和np.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。