目前我使用
Na = (3, 2, 4)
Nb = Na[1:]
A = np.arange(np.prod(Na)).reshape(Na)
b = np.arange(np.prod(Nb)).reshape(Nb)
我想计算:
r = np.empty((A.shape[0], A.shape[2])
for i in range(A.shape[2]):
r[:, i] = np.dot(A[:, :, i], b[:, i])
换句话说:A 是“4 个矩阵的堆栈”(形状为 (3,2)),即 3d 数组,b 是“4 个向量的堆栈”(形状为 (3,)),即 2d 数组。期望的结果是“4 个矩阵向量积的堆栈”,即向量堆栈,即再次是二维数组(形状为 (3, 4))。
我对 np.einsum 和 np.tensordot 进行了中等深度的研究,但我用它们构建的任何解决方案至少与我的循环解决方案一样长且可读性差。
但是我认为应该有一个简单的问题来解决这个问题。