Pytorch 从张量(矩阵)中查找特定元素索引

Pytorch 从张量(矩阵)中查找特定元素索引,pytorch,Pytorch,我是一个刚开始学习深度学习的学生 x_norm = (x**2).sum(1).view(-1, 1) if y is not None: y_norm = (y**2).sum(1).view(1, -1) else: y = x y_norm = x_norm.view(1, -1) ## NOTICE ## dist = torch.exp(-1*(x_norm + y_norm - 2.0 * torch.mm(x,

我是一个刚开始学习深度学习的学生

   x_norm = (x**2).sum(1).view(-1, 1)
   if y is not None:
       y_norm = (y**2).sum(1).view(1, -1)
   else:
       y = x
       y_norm = x_norm.view(1, -1)
   ## NOTICE ##
   dist = torch.exp(-1*(x_norm + y_norm - 2.0 * torch.mm(x, torch.transpose(y, 0, 1))))
   return dist

dist = pairwise_distances(atom_s[:3,-3:])
zero_mat=torch.zeros_like(dist,dtype=torch.float)
dist= torch.where(dist>exp(-8),dist,zero_mat)

以上是我的编码,使两两距离地图。并将满足条件的某个元素更改为0


问题是“如何获得满足特定条件(例如大于0.5)的元素索引?”而不使用慢速“for”循环。

如果它是正态张量,您可以使用

>(dist>0.5).非零()
它将返回大于
0.5的所有元素的索引

示例:

>dist=torch.rand((6,5))
>>>距离
张量([[0.7549,0.0962,0.3198,0.6868,0.8117],
[0.0785, 0.7666, 0.2623, 0.5140, 0.2713],
[0.5768, 0.8160, 0.8654, 0.6978, 0.0138],
[0.8147, 0.1394, 0.3204, 0.0104, 0.2872],
[0.1396, 0.5639, 0.7085, 0.7151, 0.8253],
[0.6115, 0.0214, 0.6033, 0.1403, 0.1977]])
>>>(距离>0.5)。非零()
张量([[0,0],
[0, 3],
[0, 4],
[1, 1],
[1, 3],
[2, 0],
[2, 1],
[2, 2],
[2, 3],
[3, 0],
[4, 1],
[4, 2],
[4, 3],
[4, 4],
[5, 0],
[5, 2]])

如果是法向张量,可以使用

>(dist>0.5).非零()
它将返回大于
0.5的所有元素的索引

示例:

>dist=torch.rand((6,5))
>>>距离
张量([[0.7549,0.0962,0.3198,0.6868,0.8117],
[0.0785, 0.7666, 0.2623, 0.5140, 0.2713],
[0.5768, 0.8160, 0.8654, 0.6978, 0.0138],
[0.8147, 0.1394, 0.3204, 0.0104, 0.2872],
[0.1396, 0.5639, 0.7085, 0.7151, 0.8253],
[0.6115, 0.0214, 0.6033, 0.1403, 0.1977]])
>>>(距离>0.5)。非零()
张量([[0,0],
[0, 3],
[0, 4],
[1, 1],
[1, 3],
[2, 0],
[2, 1],
[2, 2],
[2, 3],
[3, 0],
[4, 1],
[4, 2],
[4, 3],
[4, 4],
[5, 0],
[5, 2]])

请打印要从中查找索引的张量…或者,如果它是正张量,则可以执行
>>(dist>0.5)。非零()
它将返回超过
0.5的所有元素的索引。后一个正是我想要的。非常感谢,祝您愉快!很高兴它帮助我回答了问题。万一注释将被删除。请打印您要从中查找索引的张量…或者如果它是正态张量,您可以执行
>>(dist>0.5)。非零()
它将返回超过
0.5的所有元素的索引。后一个正是我想要的。非常感谢,祝您愉快!很高兴它帮助我回答了问题。以防评论被删除。