【发布时间】:2021-09-26 01:02:03
【问题描述】:
我有两个形状分别为[5, 5, 5] 和[5, 5] 的numpy 数组a 和b。对于a 和b,形状中的第一个条目是批量大小。当我执行矩阵乘法选项时,我得到一个形状为[5, 5, 5] 的数组。 MWE如下。
import numpy as np
a = np.ones((5, 5, 5))
b = np.random.randint(0, 10, (5, 5))
c = a @ b
# c.shape is (5, 5, 5)
假设我要在批量大小上运行一个循环,即a[0] @ b[0].T,它将产生一个形状为[5, 1] 的数组。最后,如果我沿轴 1 连接所有结果,我将得到一个形状为 [5, 5] 的结果数组。下面的代码更好地描述了这些行。
a = np.ones((5, 5, 5))
b = np.random.randint(0, 10, (5, 5))
c = []
for i in range(5):
c.append(a[i] @ b[i].T)
c = np.concatenate([d[:, None] for d in c], axis=1).T
# c.shape evaluates to be (5, 5)
我可以在不使用循环的情况下获得上述功能吗?例如,PyTorch 提供了一个名为 torch.bmm 的函数来计算它。谢谢。
【问题讨论】:
-
看看我的回答。希望对您有所帮助。
标签: python arrays python-3.x numpy matrix-multiplication