python - 对不同大小的 bool 数组进行或运算

标签 python python-2.7 numpy multidimensional-array

我有 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/

相关文章:

python - 如何在 numpy 矩阵中使用这个复数?

python - FastAPI 等效于 Flask 的 request.form,用于不可知的表单

python - 查找共同元素 (Amazon SDE-1)

python - python3 中的 sys.stdout.write 在字符串末尾添加 11

python - Flask-restful API 不接受 json

Python:如何写入文件并下载它?

python - 如何将图像上的对象轮廓绘制到单独的图像

python - BeautifulSoup 未找到全部

python - 从文件路径提取目录路径

Python 使用 numpy 数组检查列表是否在列表列表中