【发布时间】:2020-08-09 01:56:59
【问题描述】:
假设我们有两个 NxN 矩阵列表(L1 和 M1 矩阵,L2 和 M2 矩阵),我们希望找到一种有效的方法来乘以所有可能的 @987654326 @ 矩阵对。
简单示例:给定L1 = [a1, a2, a3]和L2 = [b1, b2]作为输入,我们想要得到[a1.b1, a1.b2, a2.b1, a2.b2, a3.b1, a3.b2],其中.代表numpy的dot()。
实际上,让我们马上把它做得更好:输入应该是两个形状为(M1, N, N) 和(M2, N, N) 的numpy 数组;输出的形状应该是(M1*M2, N, N)。
问题:
- 如何在没有循环的情况下使用 numpy 有效地完成这项工作?我一直在尝试,但没有成功。
- 我们如何扩展它,以便除了将所有对相乘之外,我们还每次将固定的
NxN矩阵X添加到每个乘积结果中。
起始代码:
import numpy as np
N = 2
M1 = 3
M2 = 2
L1 = np.random.randn(M1, N, N)
L2 = np.random.randn(M2, N, N)
X = np.random.randn(N, N)
【问题讨论】:
-
通过广播,我们可以将 (m1,1,n,n) 与 (1,m2,n,n) 相乘以产生 (m1,m2,n,n)。
标签: python performance numpy numpy-ndarray