将矩阵行添加到numpy

时间:2018-02-23 02:07:29

标签: python numpy pytorch

假设我有两个尺寸的3D矩阵/张量:

[10, 3, 1000]
[10, 4, 1000]

如何将每个向量的第三个维度的每个组合添加到一起,以获得以下维度:

[10, 3, 4, 1000]

所以如果你愿意的话,每一行的第二个x第三维中的每一行都会在每个组合中添加另一行。对不起,如果不清楚,我很难说明这一点...

有没有某种聪明的方法可以用numpy或pytorch来做到这一点(非常满意numpy解决方案,虽然我试图在pytorch上下文中使用它,所以火炬张量操作会更好)我是否想要编写一堆嵌套for循环?

嵌套循环示例:

x = np.random.randint(50, size=(32, 16, 512))
y = np.random.randint(50, size=(32, 21, 512))
scores = np.zeros(shape=(x.shape[0], x.shape[1], y.shape[1], 512))

for b in range(x.shape[0]):
    for i in range(x.shape[1]):
        for j in range(y.shape[1]):

            scores[b, i, j, :] = y[b, j, :] + x[b, i, :]

1 个答案:

答案 0 :(得分:0)

它对你有用吗?

import torch

x1 = torch.rand(5, 3, 6)
y1 = torch.rand(5, 4, 6)

dim1, dim2 = x1.size()[0:2], y1.size()[-2:]
x2 = x1.unsqueeze(2).expand(*dim1, *dim2)
y2 = y1.unsqueeze(1).expand(*dim1, *dim2)

result = x2 + y2

print(x1[0, 1, :])
print(y1[0, 2, :])
print(result[0, 1, 2, :])

<强>输出

 0.2884
 0.5253
 0.1463
 0.4632
 0.8944
 0.6218
[torch.FloatTensor of size 6]


 0.5654
 0.0536
 0.9355
 0.1405
 0.9233
 0.1738
[torch.FloatTensor of size 6]


 0.8538
 0.5789
 1.0818
 0.6037
 1.8177
 0.7955
[torch.FloatTensor of size 6]