如何生成一个张量,表示对于矩阵中的每一对行,同一位置的元素是否都为 1?

How to generate a tensor representing, for each pair of rows in a matrix, whether elements at the same position both = 1?

我正在尝试将矩阵中的每一行与同一矩阵中的每一行进行比较,为每一对生成一行,显示这两行的每个元素是否都等于 1。

示例:如果我将此矩阵作为输入:

[[1,0,1],
 [0,1,1],
 [0,0,0]]

我想要得到这个张量:

[[[1,0,1],
  [0,0,1],
  [0,0,0]],
 [[0,0,1],
  [0,1,1]
  [0,0,0]],
 [[0,0,0],
  [0,0,0],
  [0,0,0]]]

或者,如果它更容易,我的最终目标是将这个张量减少到一个矩阵,其中每一行代表原始矩阵的一对行中的任何元素是否都 = 1。因此,上面的张量将减少为:

[[1,1,0],
 [1,1,0],
 [0,0,0]]

如果不通过中间张量直接进入那个更容易,请告诉我。

这是一个部分答案,但它解决了第一步,这似乎是手头的问题:

import numpy as np

x = np.array([[1,0,1],
              [0,1,1],
              [0,0,0]])

output = x * np.repeat(x[:, np.newaxis, :], 3, axis=1)

output
# array([[[1, 0, 1],
#         [0, 0, 1],
#         [0, 0, 0]],

#        [[0, 0, 1],
#         [0, 1, 1],
#         [0, 0, 0]],

#        [[0, 0, 0],
#         [0, 0, 0],
#         [0, 0, 0]]])

在 PyTorch 中,它将是:

import torch

x = torch.tensor([[1,0,1],
                  [0,1,1],
                  [0,0,0]])

output = x * x.unsqueeze(1).repeat_interleave(3, dim=1)