Конечный продукт умножения матриц в динамическом c программировании? - PullRequest
1 голос
/ 29 апреля 2020

Я использую динамическое c программирование, чтобы найти оптимальный порядок умножения матриц.
После вычисления правильного порядка, Как я могу вычислить конечный продукт этих матриц?
Я имею в виду, например, у меня есть эти матрицы:

m = [40,20,30,10,30]

Оптимальный порядок умножения:

((A1(A2A3))A4)

Как использовать эту оптимальную скобку для вычисления конечного произведения ((A1 (A2A3)) A4) ?
(Предположим, у меня есть значение A1 - An)

1 Ответ

2 голосов
/ 29 апреля 2020

Предполагая, что у вас есть контроль над матрицами, например 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...