【发布时间】:2022-09-22 21:11:52
【问题描述】:
我有两个形状为 (N, M, D) 的 3d 数组,我想执行有效的逐行(在 N 上)矩阵乘法,以使结果数组的形状为 (N, D, D)。
显示我尝试实现的目标的低效代码示例如下所示:
N = 100
M = 10
D = 50
arr1 = np.random.normal(size=(N, M, D))
arr2 = np.random.normal(size=(N, M, D))
result = []
for i in range(N):
result.append(arr1[i].T @ arr2[i])
result = np.array(result)
但是,由于循环,此应用程序对于大 N 非常慢。有没有更有效的方法来实现这种计算而不使用循环?我已经尝试通过 tensordot 和 einsum 找到解决方案,但无济于事。
-
当您说慢时,您是指给定示例值 100、10 和 50 的慢吗?