使用关系运算符逐元素操作numpy数组的多个索引



我知道我可以在数组上使用关系运算符来获得一个新的布尔值数组。下面的示例生成一个布尔数组,该数组的形状与原始数组相同,但如果同一索引处的项大于0,则具有True值,否则为False值。

>>> a = np. array ([ [0 , -2 ,5] , [ -1 , -8 , -12] ,[2 , 4, -9] ])
>>> z = a > 0
>>> print (a)
[[ 0 2 5]
[ 1 -8 -12]
[ 2 4 -9]]
>>> print (z)
[[ False True True ]
[ True False False ]
[ True True False ]]

我想知道的是,是否有一种方法可以同时比较多个索引,以检查是否有两个或多个值大于0。例如,一行将检查每一行,以查看第一个元素和第二个元素是否大于0。一些看起来像的东西

z = a[:,0] > 0 and a[:,1] > 0

并将产生结果

array([False, False,  True])

因为a[0,1]=True,但a[0,0]=False,a[1,0]=True但a[0,1]=False,并且a[2,0]和a[0,2]都为True,因此第一行返回False,第二行返回False和第三行返回True


我想在没有循环的情况下完成所有这些

只需使用logical_and

它将计算"逻辑&"元素方面。

np.logical_and(a[:,0] > 0, a[:,1] > 0)

不完全是一个循环:

[b[0] > 0 and b[1] > 0 for b in a]

最新更新