Python 如果一行至少包含一个false,请检查numpy数组
我有一个2*n的真布尔和假布尔数组Python 如果一行至少包含一个false,请检查numpy数组,python,arrays,python-3.x,numpy,boolean,Python,Arrays,Python 3.x,Numpy,Boolean,我有一个2*n的真布尔和假布尔数组 array([[False, True], [False, True], [False, True], ..., [False, True], [False, True], [False, True]]) 我想要的是一个新的向量,可以在另一个数组中,如果两个值中的任何一个为False,则该数组具有False。 我可以创建一个循环,检查行中的每个值,并生成一个新的向
array([[False, True],
[False, True],
[False, True],
...,
[False, True],
[False, True],
[False, True]])
我想要的是一个新的向量,可以在另一个数组中,如果两个值中的任何一个为False,则该数组具有False。
我可以创建一个循环,检查行中的每个值,并生成一个新的向量。但我猜它很慢
boidx = np.empty(len(minindex), dtype=bool)
for idx in range(len(minindex)):
if minindex[idx,0] and minindex[idx,1]:
boidx[idx]=True
else:
boidx[idx]=False
但这是很长的,不是蟒蛇式的。
阵列为2n或4n。所以它应该涵盖这些选项(我的for循环没有)
但如果需要的话,两个解决方案的规模是可行的。
我还尝试使用numpy.isin()命令。但它对每个细胞都有效。我需要每行。如果我理解正确,pythonic解决方案可以使用: 你会得到:
[假假假假假真]
另一种解决方案是使用prod
:
boidx = np.array([bool(i.prod()) for i in minindex])
你会得到同样的结果
正如@Jianyu所建议的,这条路肯定会更快:
boidx=np.all(minindex,axis=1)
如果我理解正确,pythonic解决方案可以使用:
你会得到:
[假假假假假真]
另一种解决方案是使用prod
:
boidx = np.array([bool(i.prod()) for i in minindex])
你会得到同样的结果
正如@Jianyu所建议的,这条路肯定会更快:
boidx=np.all(minindex,axis=1)
作为已经指出的答案,您可以使用来解决它
没有任何循环的更简单公式为:
np.all(minindex, axis=1)
正如一个已经指出的答案,您可以使用来解决它 没有任何循环的更简单公式为:
np.all(minindex, axis=1)
@实际上,我不确定
np.logical_和(minindex[:,0],minindex[:,1])
是否会更快。使用np.all
though@sentence实际上,我不确定np.logical_和(minindex[:,0],minindex[:,1])
是否会更快。使用np肯定会看起来更整洁。不过,所有的