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