Предполагая, что у вас есть контроль над матрицами, например 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)