You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter Notebook中用SymPy简化矩阵行操作并自动更新矩阵?

解决方案:让行操作函数自动更新并显示矩阵

问题根源

Python中,SymPy的Matrix是不可变对象——调用elementary_row_op时,它会返回一个全新的矩阵对象,而非修改原对象。你之前的函数里对A重新赋值,只是修改了函数内部的局部变量,外部的全局变量A根本不会变化。这和C++的引用/指针逻辑不同,Python变量更像是指向对象的"标签",而非内存地址的别名。

可行方案

方案1:使用全局变量(快速实现)

在函数内声明A为全局变量,让函数内的赋值直接修改全局的A,同时返回结果让Jupyter自动渲染显示:

from sympy import *
init_printing()

# 初始化全局矩阵
A = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
A

# 改写行操作函数
def rowSwap(i, j):
    global A
    A = A.elementary_row_op(op='n<->m', row1=i-1, row2=j-1)
    return A

def rowMultiply(i, c):
    global A
    A = A.elementary_row_op(op='n->kn', row=i-1, k=c)
    return A

def rowAddSubtract(i, c, j):
    global A
    A = A.elementary_row_op(op='n->n+km', row=i-1, k=c, row2=j-1)
    return A

现在学生只需输入一行就能完成操作并更新矩阵:

rowSwap(1, 3)  # 自动更新全局A并显示结果

方案2:封装为类(更规范的教学方案)

用类把矩阵和操作方法封装在一起,既符合面向对象逻辑,也能避免全局变量的潜在问题:

from sympy import *
init_printing()

class RowOpsMatrix:
    def __init__(self, matrix):
        self.mat = Matrix(matrix)
    
    def show(self):
        display(self.mat)
        return self  # 支持链式调用
    
    def rowSwap(self, i, j):
        self.mat = self.mat.elementary_row_op(op='n<->m', row1=i-1, row2=j-1)
        self.show()
        return self
    
    def rowMultiply(self, i, c):
        self.mat = self.mat.elementary_row_op(op='n->kn', row=i-1, k=c)
        self.show()
        return self
    
    def rowAddSubtract(self, i, c, j):
        self.mat = self.mat.elementary_row_op(op='n->n+km', row=i-1, k=c, row2=j-1)
        self.show()
        return self

# 初始化矩阵
A = RowOpsMatrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
A.show()

使用时学生输入一行即可,还支持链式操作:

A.rowSwap(1, 3).rowMultiply(2, 2)  # 先交换行1和3,再把行2乘2,自动显示每一步结果

为什么之前的修改无效?

你之前修改的函数里,A = A.elementary_row_op(...)只是在函数内部创建了一个局部变量A,指向新的矩阵对象,但外部的全局A仍然指向原来的矩阵。Python中不可变对象的赋值不会影响外部变量,除非明确使用全局声明或者通过可变容器(比如类的实例属性)修改。

内容的提问来源于stack exchange,提问作者Raheem M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:05:24