如何生成一个张量,表示对于矩阵中的每一对行,同一位置的元素是否都为 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)
我正在尝试将矩阵中的每一行与同一矩阵中的每一行进行比较,为每一对生成一行,显示这两行的每个元素是否都等于 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)