我想知道通过比较内部“子数组”和维数较少的数组来获得 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)
