我有 3 个一维 bool 数组:
a1 = np.ones((2,), dtype=bool)
a2 = np.ones((4,), dtype=bool)
a3 = np.ones((3,), dtype=bool)
a1[1]= False
a2[1:3] = False
a3[1:] = False
a1 => [ True False]
a2 => [ True False False True]
a3 => [ True False False]
我想要的是一个新的 ndarray,其形状为 len(a1), len(a2), len(a3)
将各个数组的元素进行或运算,结果为:
[[[ True True True]
[ True True True]
[ True True True]
[ True True True]]
[[ True True True]
[ True False False]
[ True False False]
[ True True True]]]
有没有一种有效的方法来做到这一点(最好使用 numpy 例程)?
最佳答案
我认为你只需要明智地插入新轴并让广播处理其余的:
>>> a1 = np.ones((2,), dtype=bool)
>>> a2 = np.ones((4,), dtype=bool)
>>> a3 = np.ones((3,), dtype=bool)
>>>
>>> a1[1]= False
>>> a2[1:3] = False
>>> a3[1:] = False
>>>
>>> a1[:, None, None] | a2[None, :, None] | a3[None, None, :]
array([[[ True, True, True],
[ True, True, True],
[ True, True, True],
[ True, True, True]],
[[ True, True, True],
[ True, False, False],
[ True, False, False],
[ True, True, True]]], dtype=bool)
如果您更喜欢 np.newaxis
读起来更好的方式,您可以使用它来代替 None
(它是一个别名):
>>> a1[:, np.newaxis, np.newaxis] | a2[np.newaxis, :, np.newaxis] | a3[np.newaxis, np.newaxis, :]
array([[[ True, True, True],
[ True, True, True],
[ True, True, True],
[ True, True, True]],
[[ True, True, True],
[ True, False, False],
[ True, False, False],
[ True, True, True]]], dtype=bool)
关于python - 对不同大小的 bool 数组进行或运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797677/