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

SymPy中block_collapse()处理块矩阵先逆后转置返回1是否为Bug?

SymPy block_collapse处理先求逆再转置的块矩阵异常问题

这并非对block_collapse用法的误解,而是SymPy的一个bug。当对先执行逆运算再执行转置运算的块矩阵调用block_collapse()时,函数内部的简化逻辑出现错误,错误地将结果简化为标量1,而非预期的单位矩阵。

问题复现代码

from sympy import (BlockMatrix, symbols, Identity, ZeroMatrix, block_collapse)
n = symbols('n')
In = Identity(n)
Zeron = ZeroMatrix(n,n)
A = BlockMatrix([
  [In, Zeron],
  [Zeron, In]])
At = A.transpose()
Ati = At.inverse()
Ai = A.inverse()
Ait = Ai.transpose()

# 正常输出单位矩阵
block_collapse(A)
block_collapse(At)
block_collapse(Ati)
block_collapse(Ai)

# 异常输出1
block_collapse(Ait)

临时解决方法

通过拆分操作步骤,先对逆矩阵调用block_collapse()将其转换为常规矩阵,再执行转置操作,即可得到正确结果:

Aib = block_collapse(Ai)
Aibt = Aib.transpose()
block_collapse(Aibt)
# 输出预期的单位矩阵
# Matrix([
# [I, 0],
# [0, I]])

内容的提问来源于stack exchange,提问作者David L Thiessen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:43