Sympy矩阵操作:如何始终先打印变量,后打印常数?
SymPy矩阵表达式调整:变量在前、常数在后且无空格输出
需求说明
- 矩阵运算后,表达式变量保持字母顺序(已满足)
- 输出无空格
- 所有常数项放在表达式末尾
- 最终输出格式为类似
'-x+1/2,-x+y,-z+1/2'的字符串并写入文件
解决方案
通过自定义表达式重排函数,分离变量项与常数项,调整顺序后再格式化输出。以下是修改后的完整代码:
import sympy from sympy import symbols, Matrix, Rational, pprint from sympy import init_printing init_printing() def rearrange_expr(expr): # 拆分表达式各项 terms = expr.as_ordered_terms() # 分离变量项和常数项 var_terms = [term for term in terms if not term.is_constant()] const_terms = [term for term in terms if term.is_constant()] # 重新组合:变量项在前,常数项在后 rearranged = sum(var_terms) + sum(const_terms) # 去除空格并返回字符串 return str(rearranged).replace(' ', '') # 原矩阵运算部分 mm = Matrix([[-1,0,0], [-1,1,0], [0,0,-1]]) tt = Matrix([Rational(6,12), Rational(0,12), Rational(6,12)]) x, y, z = symbols('x y z') r = Matrix([x, y, z]) rp = mm * r + tt # 处理每个元素并生成目标字符串 formatted_items = [rearrange_expr(item) for item in rp] final_output = ','.join(formatted_items) # 打印验证 print("调整后的矩阵表达式:") pprint(Matrix(formatted_items)) print("\n最终目标格式输出:") print(final_output) # 写入文件 with open('matrix_output.txt', 'w') as f: f.write(final_output)
效果验证
- 原输出:
⎡1/2 - x⎤ ⎢ ⎥ ⎢-x + y ⎥ ⎢ ⎥ ⎣1/2 - z⎦
- 调整后输出:
⎡-x+1/2⎤ ⎢ ⎥ ⎢-x+y ⎥ ⎢ ⎥ ⎣-z+1/2⎦
- 最终目标字符串:
'-x+1/2,-x+y,-z+1/2'
内容的提问来源于stack exchange,提问作者masher
相关产品推荐
相关产品推荐

