使用Sympy快速将变量名称中的前缀分配到矩阵中-使用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]

如何找到与PythonSympy相同的方法?

我尝试过:

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-string:

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₄₄⎦

最新更新