我正在使用动态编程来找到矩阵相乘的最佳顺序。计算正确的顺序后,如何计算这些矩阵的最终乘积?例如,我的意思是我有这些矩阵:
m = [40,20,30,10,30]
最佳的乘法顺序是:
((A1(A2A3))A4)
如何使用该最佳括号来计算((A1(A2A3))A4)的最终乘积?(假设我的值为A1-An)
[假设您有一个包含矩阵的字典,例如matrices = {'A1': ..., 'A2': ...}
,并且它们是Numpy数组,您可以修改字符串以使其包含__matmul__
运算符@
,然后使用eval
计算结果:
import re
import numpy as np
matrices = {f'A{i}': np.random.randint(0, 10, size=(2, 2)) for i in range(1, 5)}
equation = '((A1(A2A3))A4)'
equation = re.sub('(?<=[0-9)])(?=[(A])', '@', equation)
result = eval(equation, {}, matrices)