具有多个条件的掩码 list/tensor?

mask list/tensor with multiple conditions?

下面的代码屏蔽很好

mask = targets >= 0
targets = targets[mask]

然而,当我尝试使用两个条件进行屏蔽时,它给出了 RuntimeError: Boolean value of Tensor with more than one value is ambiguous

的错误
mask = (targets >= 0 and targets <= 5)
targets = targets[mask]

有办法吗?

使用 np.logical_and 创建合取掩码,因为它 returns 是一个结合了两个条件而不是返回布尔值的新掩码。

targets = np.array([-1,0,1,2,3,4,5,6])
mask = np.logical_and(targets >= 0, targets <= 5) # == [0,1,1,1,1,1,0]

print(targets[mask]) # [0,1,2,3,4,5]

编辑:我看到你用的是pytorch,过程基本一样,直接用torch.logical_and.

您在使用括号时犯了错误。将每个条件括起来,以便 NumPy 将它们视为单独的数组。

targets = np.random.randint(0,10,(10,))

mask = (targets>=0) & (targets<=5) #<----------

print(mask)
targets[mask]
[ True False  True False False  True  True  True False  True]
array([4, 1, 3, 1, 5, 3])

您可以使用多个掩码创建一些复杂的逻辑,然后直接用它们索引一个数组。示例 - XNOR 可以写成 ~(mask1 ^ mask2)