如何在3D阵列的特定一侧应用2D遮罩?

2024-05-26 19:55:14 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有形状(n,n,n)的规则3D数组,其中填充有Trues。我想创建一个对角线主辅数组。它们应该是阵列。我的方法可以用以下方式描述:

enter image description here

我的方法如下所示:

def dpm(n):
    b = np.ones(shape=(n,n,n), dtype=bool)
    b[np.eye(n, dtype=bool)] = False
    b = b.swapaxes(1,2) # rotate in order to apply masking
    b[np.eye(n, dtype=bool)] = False
    b = b.swapaxes(1,2) # rotate back
    return b

我后来从可视化中注意到,背部旋转是不必要的。输出示例:

>>> dpm(3)
array([[[False, False, False],
        [False,  True,  True],
        [False,  True,  True]],

       [[ True, False,  True],
        [False, False, False],
        [ True, False,  True]],

       [[ True,  True, False],
        [ True,  True, False],
        [False, False, False]]])

有没有一种方法可以在不交换轴的情况下屏蔽数组b.swapaxes(1,2)


Tags: 方法falsetrue规则np数组dpmbool

热门问题