【发布时间】:2018-02-23 02:07:28
【问题描述】:
假设我有两个具有维度的 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, :]
【问题讨论】:
-
你的意思是
arr1[:, :, None, :] + arr2[:, None, :, :]? -
是的……可能。我在尝试使用嵌套循环的地方发布了一些示例代码,然后我尝试了您的示例,但不知何故,即使尺寸相同,这些值也不相等。我可能在我的循环中犯了一个错误,但我只是想确保你的代码正在做我理解的事情。不知道发生了什么...
-
不是手电筒用户,所以恐怕无法帮助您。
.data[0]是做什么的? -
哦,它只是返回张量中底层 numpy 矩阵的值......它不相关;我也可以用 numpy 形式编写它,但那里的代码看起来像它所做的那样,你可以忽略 .data[0]。 size(x) 函数还给出了维度 x 的矩阵大小
-
实际上你可能是对的......我在 numpy 中实现了它,它是平等的......谢谢。我在某处搞砸了我的火炬实现