Python 3.x 两个n维pytorch张量的不相交
提前感谢大家的帮助!我在PyTorch中试图做的是为许多维度的张量计算非交集(称之为Python 3.x 两个n维pytorch张量的不相交,python-3.x,algorithm,pytorch,intersection,Python 3.x,Algorithm,Pytorch,Intersection,提前感谢大家的帮助!我在PyTorch中试图做的是为许多维度的张量计算非交集(称之为torch.nonintersection)(没有for循环,因为我希望它能在GPU上有效地执行)。下面是它应该如何工作的示例: a = torch.tensor([[ 0., 0.], [ 0., 1.], [ 0., 2.], [ 1., 0.], [ 1., 1.], [ 1., 2.], [ 1., 3.], [ 2., 0.], [ 2., 1.]
torch.nonintersection
)(没有for循环,因为我希望它能在GPU上有效地执行)。下面是它应该如何工作的示例:
a = torch.tensor([[ 0., 0.], [ 0., 1.], [ 0., 2.], [ 1., 0.], [ 1., 1.], [ 1., 2.], [ 1., 3.],
[ 2., 0.], [ 2., 1.], [ 2., 2.]])
b = torch.tensor([[ 2., 0.], [ 2., 1.], [ 2., 2.], [ 1., 0.], [ 1., 1.], [ 1., 2.], [ 1., 3.]])
torch.spec_unique(a,b) = torch.tensor([ 0., 0.], [ 0., 1.], [ 0., 2.])
我有for循环的类比,但它们现在占用了太多的时间。你知道怎么做吗?非常感谢 在你的情况下,
a
和b
的形状是不同的(a
是(10,2)
,而b
是(7,2)
),因此你必须将较大的张量“切割”成较小张量的大小。下面的函数使用简单的if
处理它(它不会减慢计算速度):
这将返回:
tensor([[0, 0],
[1, 0],
[2, 0]])
因此,列的顺序相反。如果希望获得与示例中相同的列,可以在非交叉点上执行此操作
输出:
torch.index_select(non_intersection(a, b), 1, torch.tensor([1, 0])))
在你的例子中,
a
和b
的形状是不同的(a
是(10,2)
,而b
是(7,2)
),因此你必须将较大的张量“切割”成较小张量的大小。下面的函数使用简单的if
处理它(它不会减慢计算速度):
这将返回:
tensor([[0, 0],
[1, 0],
[2, 0]])
因此,列的顺序相反。如果希望获得与示例中相同的列,可以在非交叉点上执行此操作
输出:
torch.index_select(non_intersection(a, b), 1, torch.tensor([1, 0])))
这就是对称性的区别吗?@phipsgabler当然,我以前不知道这个词。谢谢澄清!这就是对称性的区别吗?@phipsgabler当然,我以前不知道这个词。谢谢澄清!非常感谢,这真的是我一直在寻找的!但在我的例子中,我会考虑填充一些虚拟数据。@ KoCHevi-列昂,它是非常浪费的垫它,因为你可以确定没有交叉点。你们可以用零来填充最终结果。是的,乍一看我好像不明白它是怎么回事。再次感谢!非常感谢,这真的是我一直在寻找的!但在我的例子中,我会考虑填充一些虚拟数据。@ KoCHevi-列昂,它是非常浪费的垫它,因为你可以确定没有交叉点。你们可以用零来填充最终结果。是的,乍一看我好像不明白它是怎么回事。再次感谢!