如何在Python中创建参数化矩阵并根据需要生成最终矩阵?

问题描述 投票:0回答:1

我处于需要使用参数化矩阵的情况。例如,假设我从两个矩阵 AB,

开始
A = [1 2]     B = [a b]
    [3 4]         [5 6]

这里矩阵 B 使用变量 ab 进行参数化。我可能在某些时候需要组合矩阵,例如使用矩阵乘法,以获得 AB = C:

C = AB = [a+10   b+12 ]
         [3a+20  3b+24]

我现在想将矩阵 C 与这些变量一起存储在其中,并且能够为变量提供值并评估元素。 IE。矩阵 C 是由变量 ab 参数化的矩阵。

我不想通过向 B 提供参数并执行所有矩阵乘法来随时生成 C,而是想通过执行一次矩阵乘法来存储矩阵 C 的一般结构,其中 C 继承其组成部分的任何变量。我希望这会节省运行时间,因为矩阵 Cstruct 被缓存,即我不需要每次更改参数时都进行矩阵运算。

就我而言,可能有很多这样的矩阵,每个矩阵都有自己的变量元素,我可能需要任意组合它们(矩阵乘积、克罗内克乘积等)。我想知道是否有一种既定的方法可以在Python中实现这一点。如果解决方案是“高性能”,也会很有帮助,因为我尝试运行的代码中会有许多矩阵运算。不幸的是,我现在必须坚持使用 Python,因此其他语言的解决方案的帮助不大。 我尝试使用

sympy

模块实现这个结果,我认为我有一个非常粗略的设置似乎可以工作,但我想知道在 Python 中是否有更规范的方法来做到这一点。另外,我不确定

sympy
是否是性能最好的,并且我不确定是否可以使用
numpy
获得这样的系统。下面给出了我的
sympy
代码的简化版本,以供参考:
import sympy as s
from sympy import Matrix
from sympy.physics.quantum import TensorProduct as tp


A = Matrix([[1,2],
            [3,4]])

a, b = s.symbols('a b')
B = Matrix([[a,b],
            [5,6]])


# To obtain C, parameterized by a and b
C = A*B
display(C)

# Finally, to evaluate C with parameters a=3 and b=0.5
C_eval = C.evalf(subs={a:3, b:0.5})
display(C_eval)

# Or, to generate and evaluate a different combination of A and B
D = tp(A,B)
display(D)
D_eval = D.evalf(subs={a:3, b:0.5})
display(D_eval)

	
python numpy performance sympy matrix-multiplication
1个回答
0
投票

import sympy as s from sympy import Matrix # Define the matrices and parameters A = Matrix([[1, 2], [3, 4]]) a, b = s.symbols('a b') B = Matrix([[a, b], [5, 6]]) # Perform matrix multiplication to create the parameterized matrix C C = A * B # Display the parameterized matrix C print("Parameterized Matrix C:") s.pprint(C) # Function to evaluate the parameterized matrix with specific values def evaluate_matrix(matrix, **params): return matrix.subs(params) # Evaluate matrix C with specific values for a and b C_eval = evaluate_matrix(C, a=3, b=0.5) print("\nEvaluated Matrix C with a=3 and b=0.5:") s.pprint(C_eval) # Example of another matrix operation (Kronecker product) D = A.kron(B) print("\nParameterized Matrix D (Kronecker product of A and B):") s.pprint(D) # Evaluate matrix D with specific values for a and b D_eval = evaluate_matrix(D, a=3, b=0.5) print("\nEvaluated Matrix D with a=3 and b=0.5:") s.pprint(D_eval)

	
© www.soinside.com 2019 - 2024. All rights reserved.