如何在NumPy数组中为每个三维向量乘矩阵(无循环)
问题描述
我有如下NumPy数组:
to_multiply = np.array([[[1,2,3], [2,3,4], [5,6,7]]])
我希望将三维数组中的所有向量与一个矩阵相乘,请问如何不使用for循环实现该操作?
使用for循环的实现方式如下:
for x in range(1): for y in range(2): to_multiply[y, x] @= matrix
解决方案
可以利用NumPy的广播机制和矩阵乘法的维度匹配特性直接实现,无需显式循环:
核心要求
确保to_multiply的最后一维长度(即向量长度)等于目标矩阵的倒数第二维长度(即矩阵行数),这样才能满足矩阵乘法的维度兼容规则。
具体实现
假设你的matrix是形状为(3, N)的矩阵(比如常用的(3,3)方阵),直接执行以下代码即可:
# 方法1:使用@运算符(语法简洁,推荐) result = to_multiply @ matrix # 方法2:使用np.matmul,效果与@完全一致 result = np.matmul(to_multiply, matrix)
维度说明
原数组to_multiply的形状是(1, 3, 3),当matrix为(3,3)时,NumPy会自动将matrix广播为(1, 3, 3)的形状,然后对每个对应位置的向量和矩阵做乘法运算,最终输出结果的形状为(1, 3, N)(N为矩阵的列数),和原数组的结构保持一致。
内容的提问来源于stack exchange,提问作者flameshooter09
相关产品推荐
相关产品推荐

