Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Pytorch 如何在使用pytrorch masked_select时保留2D(或更多)形状_Pytorch - Fatal编程技术网

Pytorch 如何在使用pytrorch masked_select时保留2D(或更多)形状

Pytorch 如何在使用pytrorch masked_select时保留2D(或更多)形状,pytorch,Pytorch,假设我有以下两个匹配的形状张量: a = tensor([[ 0.0113, -0.1666, 0.5960, -0.0667], [-0.0977, -0.1984, 0.5153, 0.0420]]) selectors = tensor([[ True, True, False, False], [ True, False, True, False]]) 使用torch.masked_选择查找a中与选择器中的真索引匹配的值,如下所示: torch.masked_select(a

假设我有以下两个匹配的形状张量:

a = tensor([[ 0.0113, -0.1666,  0.5960, -0.0667], [-0.0977, -0.1984,  0.5153,  0.0420]])
selectors = tensor([[ True,  True, False, False], [ True,  False, True, False]])
使用
torch.masked_选择
查找
a
中与
选择器中的真索引匹配的值,如下所示:

torch.masked_select(a, selectors)
输出将为1D形状,而不是原始2D形状:

tensor([ 0.0113, -0.1666, -0.0977, 0.5153])
这与文档()中给出的
masked_select
行为一致。然而,我的目标是得到一个匹配两个原始张量形状的结果。即:

tensor([[0.0113, -0.1666], [-0.0977, 0.5153]])

有没有一种方法可以在不需要遍历张量中的所有元素并找到每个元素的掩码的情况下得到这个结果?请注意,我也研究过使用,但它不适合我所看到的情况。

注意,masked_select的先决条件没有指定每行必须有相同数量的
True
条目,因此无法保留输出形状(例如,
True
s的总数可以是一个素数,那么最终的形状是什么?)。您可以在执行蒙版选择后使用
张量。重塑
,将输出重塑为您想要的任何有效形状。在您的示例中,您可以执行
火炬。蒙版选择(a,选择器)。重塑(a.shape[0],-1)
只要
选择器中的每一行都有相同数量的
True
条目,它就可以工作。你是对的。我刚刚意识到了这一点。我的最终目标是根据
选择器中的布尔值,从
a
中的第二维度找到给定子集的最大值(即找到
[0.0113,-0.1666]的最大值)
[-0.0977,0.5153]
)因此,我想我最好的选择是循环两个张量的第二维,然后在列表中收集子集或动态查找最大值。请注意,masked_select的前提条件没有指定每行必须有相同数量的
True
条目,因此无法保留输出形状(例如,
True
s的总数可以是一个素数,那么最终的形状是什么?)。您可以在执行蒙版选择后使用
张量。重塑
,将输出重塑为您想要的任何有效形状。在您的示例中,您可以执行
火炬。蒙版选择(a,选择器)。重塑(a.shape[0],-1)
只要
选择器中的每一行都有相同数量的
True
条目,它就可以工作。你是对的。我刚刚意识到了这一点。我的最终目标是根据
选择器中的布尔值,从
a
中的第二维度找到给定子集的最大值(即找到
[0.0113,-0.1666]的最大值)
[-0.0977,0.5153]
)。因此,我想我最好的选择是循环两个张量的第二维,然后在列表中收集子集,或者动态查找最大值。