使用 Sympy 将变量名称中的前缀快速分配到 Matrix - Matlab 示例

Assign quickly a prefix in variable names into Matrix with Sympy - Example with Matlab

有了Matlab,我可以轻松给出符号矩阵元素的前缀:

例如,像这样:

Mat4x4_SYM = sym('sp_', [4,4]);
tril(Mat2x2_SYM.') + triu(Mat2x2_SYM,1)

给出:

Mat4x4_SYM =
    
[ sp_1_1, sp_1_2, sp_1_3, sp_1_4]
[ sp_1_2, sp_2_2, sp_2_3, sp_2_4]
[ sp_1_3, sp_2_3, sp_3_3, sp_3_4]
[ sp_1_4, sp_2_4, sp_3_4, sp_4_4]

如何找到对 Python Sympy 执行相同操作的方法?

我试过:

from sympy import symbols, Matrix

def f(i, j):
  if i == 0 and j == 0:
   return 'sp_1_1'
elif i == 0 and j == 1:                  
   return 'sp_1_2'
elif i == 1 and j == 0:                                                                                            
   return 'sp_1_2'
...


Mat4x4_SYM = Matrix(4, 4, lambda i,j: f(i,j))

如您所见,我想在符号变量名称中强制此矩阵对称。

有没有人遇到过像在 Matlab 中一样轻松定义符号变量名前缀的同类问题?

如果是,是否有快速执行此操作的方法?

使用列表理解和 f 字符串:

In [9]: Matrix([[Symbol(f'sp_{min(i,j)}{max(i,j)}') for i in range(1, 4+1)] for j in range(1, 4+1)])
Out[9]: 
⎡sp₁₁  sp₁₂  sp₁₃  sp₁₄⎤
⎢                      ⎥
⎢sp₁₂  sp₂₂  sp₂₃  sp₂₄⎥
⎢                      ⎥
⎢sp₁₃  sp₂₃  sp₃₃  sp₃₄⎥
⎢                      ⎥
⎣sp₁₄  sp₂₄  sp₃₄  sp₄₄⎦