如何对数量可变的多个NumPy矩阵一次性完成连乘运算
NumPy 动态长度矩阵列表批量连乘实现方案
完全可以实现,NumPy本身就提供了对应支持,不需要手写循环遍历计算,以下是两种可直接使用的方案,都支持Number变量动态调整,只要列表内矩阵维度满足乘法匹配规则即可正常运行:
方案1:优先使用
np.linalg.multi_dot(推荐)
这是NumPy专门为多矩阵连乘设计的内置函数,会自动优化矩阵乘法的计算顺序,矩阵数量多、维度大时运算效率更高,直接传入存储矩阵的列表即可完成所有矩阵的依次相乘:import numpy as np Number = 10 mylist = [np.random.randint(1, 5, size=(4, 4)) for i in range(Number)] # 计算顺序为 mylist[0] @ mylist[1] @ mylist[2] @ ... @ mylist[-1] dot_result = np.linalg.multi_dot(mylist)方案2:
functools.reduce配合@运算符
如果你的NumPy版本过低没有multi_dot,可以用Python标准库的reduce方法累计执行矩阵乘法,逻辑是把矩阵乘法操作依次应用到列表所有元素上,计算结果和方案1完全一致:import numpy as np from functools import reduce Number = 10 mylist = [np.random.randint(1, 5, size=(4, 4)) for i in range(Number)] dot_result = reduce(lambda x, y: x @ y, mylist)
注意:以上两种方案都不需要针对
Number的取值修改计算逻辑,调整Number生成不同长度的矩阵列表后,直接传入即可得到正确的连乘结果。你的场景中所有矩阵都是4×4方阵,天然满足矩阵乘法维度匹配要求,不会出现维度报错问题。
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

