【问题标题】:Zeroing the diagonal of a matrix by multiplying by (1-I)通过乘以 (1-I) 将矩阵的对角线归零
【发布时间】:2021-04-21 02:47:51
【问题描述】:

我有一个张量,可以这样说:

tensor([[2.7183, 0.4005, 2.7183, 0.5236],
    [0.4005, 2.7183, 0.4004, 1.3469],
    [2.7183, 0.4004, 2.7183, 0.5239],
    [0.5236, 1.3469, 0.5239, 2.7183]])

我想通过将其乘以 (1-I) 来将其主对角线归零,即乘以 1 减去 单位矩阵。 如何在 pytorch 中做到这一点?

示例的结果应该是:

    tensor([[0.0000, 0.4005, 2.7183, 0.5236],
    [0.4005, 0.0000, 0.4004, 1.3469],
    [2.7183, 0.4004, 0.0000, 0.5239],
    [0.5236, 1.3469, 0.5239, 0.0000]])

我正在寻找一般案例解决方案,而不是针对我给出的示例。 谢谢!

【问题讨论】:

标签: python computer-vision pytorch


【解决方案1】:

torch.eye 将有助于生成单位矩阵

import torch

x = torch.tensor([[2.7183, 0.4005, 2.7183, 0.5236],
    [0.4005, 2.7183, 0.4004, 1.3469],
    [2.7183, 0.4004, 2.7183, 0.5239],
    [0.5236, 1.3469, 0.5239, 2.7183]],dtype=torch.float32)
y = 1-torch.eye(x.size()[0],dtype=torch.float32)  #only if x is square matrix
output = x*y

【讨论】:

    【解决方案2】:

    PyTorch 有一个 built in function 可以就地执行此操作:

    x.fill_diagonal_(0)
    

    您可以直接将它应用到您的矩阵,或者如果您真的想要1 - I 可以将它应用到一个矩阵:

    1 - torch.eye(n)
    
    # Alternatively
    torch.ones(n,n).fill_diagonal_(0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      相关资源
      最近更新 更多