如何用numpy.matmul实现批量对应2×2矩阵相乘(无循环)
批量对应位置矩阵乘法的无循环实现
首先纠正你示例中的问题:你需求的数组形状是(2000,2,2),但示例里创建的是(2,2,2000),这是导致后续报错的核心原因之一。针对你实际需求的(2000,2,2)数组,有两种简单的无循环实现方式:
方法1:使用np.matmul
当数组的第一个维度是批量轴(即2000组2×2矩阵)时,np.matmul会自动对每组对应位置的矩阵执行乘法运算,直接得到目标形状的结果:
import numpy as np a = np.ones((2000, 2, 2)) b = np.ones((2000, 2, 2)) result = np.matmul(a, b) print(result.shape) # 输出 (2000, 2, 2)
每个结果矩阵的元素都是2(因为1×1+1×1=2),符合矩阵乘法的预期。
方法2:使用@运算符
@是np.matmul的语法糖,用法更简洁,效果完全一致:
result = a @ b
如果你确实需要处理(2,2,2000)形状的数组
可以用np.einsum指定维度对应关系,实现批量矩阵乘法:
a = np.ones((2,2,2000)) b = np.ones((2,2,2000)) result = np.einsum('ijk,jlk->ilk', a, b) print(result.shape) # 输出 (2,2,2000) # 若需要转换为(2000,2,2),可执行转置 result = result.transpose(2, 0, 1)
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

