检查张量的每个元素是否包含在列表中

假设我有一个张量 A 和一个值容器 vals 。是否有一种干净的方法可以返回与 A 形状相同的布尔张量,每个元素是 A 的元素是否包含在 vals 中?例如:

A = torch.tensor([[1,2,3],
                  [4,5,6]])
vals = [1,5]
# Desired output
torch.tensor([[True,False,False],
              [False,True,False]])
stack overflow Check if each element of a tensor is contained in a list
原文答案
author avatar

接受的答案

你可以简单地这样做:

result = A.apply_(lambda x: x in vals).bool()

那么 result 将包含这个张量:

tensor([[ True, False, False],
        [False,  True, False]])

在这里,我只是使用了一个 lambda 函数和 apply_ 方法,您可以在 official documentation 中找到它们。


答案:

作者头像

您可以使用 for 循环实现此目的:

sum(A==i for i in B).bool()
作者头像
[list(map(lambda x: x in vals, thelist)) for thelist in A]
作者头像

使用{JMX=} 方法是最方便的方法。很简单,如下: torch.isin