python - 多维矩阵(/数组)的矩阵乘法 - 如何避免循环?

标签 python arrays numpy matrix multidimensional-array

我正在尝试使用包含多个要相乘的矩阵的数组来评估矩阵乘法。这可以通过使用 np.dot (或 Py3.5 + 中的新 @ 运算符)的两个矩阵轻松实现,但我正在努力扩展它以有效地评估我的多维数组。

举个例子,假设我有形状为 (5,3,3) 的矩阵 A 和形状为 (5,3) 的矩阵 B。现在,我想对每 5 个案例的后面部分进行矩阵处理:即

res[0] = np.dot(A[0], B[0])
res[1] = np.dot(A[1], B[1])
etc

我可以使用循环成功实现这一点 - 例如:

A = np.random.random((5,3,3))
B = np.random.random((5,3))

res = np.zeros([5,3])

for i in range(len(A)):
    res[i] = np.dot(A[i], B[i])

尽管这很慢,因为它使用了循环。

有没有我可以采取的函数/方法来完全矢量化它?

谢谢。

最佳答案

您可以使用np.einsum -

np.einsum('ijk,ik->ij',A,B)

使用np.matmul -

np.matmul(A,B[...,None]).squeeze()
np.matmul(A,B[...,None])[...,0]

关于python - 多维矩阵(/数组)的矩阵乘法 - 如何避免循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42976728/

相关文章:

python - 取平均值时如何避免在 2d numpy 数组中被零除?

java - 我应该在捕获异常之前始终知道异常的类型吗?

arrays - 处理多种类型和数组时如何编写 "good"Julia代码(多重分派(dispatch))

javascript - 警报阵列时未识别

python - 如何从np直方图计算熵

python - Pandas:根据另一列向后填充缺失值

python - mrjob 找不到输入文件

java - 将二维数组分成不相等的矩形和正方形

python - 如何使用 python 提高解析器的速度?

python - 向量化函数以从日期列表中获取最接近的日期