具有多个条件的掩码 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)
下面的代码屏蔽很好
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)