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