Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 两个n维pytorch张量的不相交_Python 3.x_Algorithm_Pytorch_Intersection - Fatal编程技术网

Python 3.x 两个n维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.]

提前感谢大家的帮助!我在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.], [ 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-列昂,它是非常浪费的垫它,因为你可以确定没有交叉点。你们可以用零来填充最终结果。是的,乍一看我好像不明白它是怎么回事。再次感谢!