SymPy - substitute sybolic entries in a matrix

后端 未结 3 1252
暗喜
暗喜 2021-01-24 00:54

I have a python function which generates a sympy.Matrix with symbolic entries. It works effectively like:

import sympy as sp
M = sp.Matrix([[1,0,2],[0,1,2],[1,2,         


        
相关标签:
3条回答
  • 2021-01-24 01:36

    In the general case, I assume you're looking for an n-by-m matrix of symbolic elements.

    import sympy
    
    def make_symbolic(n, m):
        rows = []
        for i in xrange(n):
            col = []
            for j in xrange(m):
                col.append(sympy.Symbol('a%d%d' % (i,j)))
            rows.append(col)
        return sympy.Matrix(rows)
    

    which could be used in the following way:

    make_symbolic(3, 4)
    

    to give:

    Matrix([
    [a00, a01, a02, a03],
    [a10, a11, a12, a13],
    [a20, a21, a22, a23]])
    

    once you've got that matrix you can substitute in any values required.

    0 讨论(0)
  • 2021-01-24 01:40

    Given that the answer from Andrew was helpful it seems like you might be interested in the MatrixSymbol.

    In [1]: from sympy import *
    
    In [2]: X = MatrixSymbol('X', 3, 4)
    
    In [3]: X  # completely symbolic
    Out[3]: X
    
    In [4]: Matrix(X)  # Expand to explicit matrix 
    Out[4]: 
    ⎡X₀₀  X₀₁  X₀₂  X₀₃⎤
    ⎢                  ⎥
    ⎢X₁₀  X₁₁  X₁₂  X₁₃⎥
    ⎢                  ⎥
    ⎣X₂₀  X₂₁  X₂₂  X₂₃⎦
    

    But answering your original question, perhapcs you could get the symbols out of the matrix that you produce?

    x12 = X[1, 2]
    
    0 讨论(0)
  • 2021-01-24 01:52

    Symbols are defined by their name. Two symbols with the same name will considered to be the same thing by Sympy. So if you know the name of the symbols you want, just create them again using symbols.

    You may also find good use of the zip function of Python.

    0 讨论(0)
提交回复
热议问题