Skip to main content
 首页 » 编程设计

python之比较numpy中的子数组

2025年05月04日27jyk

我想知道通过比较内部“子数组”和维数较少的数组来获得 bool 数组的最佳方法是什么。例如,给定:

a = array([[[[-1, -1], [-1,  1]], 
            [[-1, -1], [ 1,  1]]], 
           [[[ 0, -1], [ 1,  1]], 
            [[ 0,  1], [-1, -1]]]]) 
a.shape == (n, m, k, l) 

和

b = [-1, -1] 
b.shape == (l,) 

我想得到:

c = array([[[True, False], 
            [True, False]], 
           [[False, False], 
            [False, True]]]) 
c.shape == (n, m, k)  

但是,一般来说我们可以想象:

b.shape == (k, l) 
c.shape == (n, m)  

请您参考如下方法:

尝试:

logical_and.reduce(a == b, axis = -1) 

由于 b 的形状与 a 的最后一个维度匹配,它将自动广播,因此您可以直接应用 == 运算符将逐点比较返回一个与 a 形状相同的逻辑数组。 reduce 操作为所有仅包含 True 值的“行”返回 True(将 ndim 减一)

第二个例子(一定要注意axis参数的区别):

>>> b = [[-1,-1],[-1,1]]                                                                                                              
>>> logical_and.reduce(a == b, axis = (-2,-1)) 
array([[ True, False],                                                                                                                                       
       [False, False]], dtype=bool)