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

Sympy中Matrix.factor()因非交换标量报错,求符号矩阵提公因子方案

解决Sympy符号矩阵提取公因子的问题

问题原因

Sympy的factor()方法主要针对标量表达式设计,而矩阵乘法具有非交换性,直接对MatrixSymbol构造的表达式调用factor()会触发非交换因子的不支持错误。

可行解决方案

方法1:使用collect()函数提取公因子

collect()可以识别表达式中的公共子表达式,并结合自定义逻辑提取矩阵公因子:

import sympy as sy

N = sy.Symbol("N", integer=True, positive=True)
P = sy.Symbol("P", integer=True, positive=True)
X = sy.MatrixSymbol("X", N, P)
Y = sy.MatrixSymbol("Y", N, P)

example = X * X.T + Y * X.T
# 收集右侧公因子X.T,构造(X+Y)*X.T形式
result = sy.collect(example, X.T, func=lambda expr, coeff: coeff * X.T)
print(result)  # 输出 (X + Y)*X.T

方法2:手动构造并验证等价性

如果明确公因子位置,可直接构造因式分解后的表达式,并用expand()验证与原表达式等价:

import sympy as sy

N = sy.Symbol("N", integer=True, positive=True)
P = sy.Symbol("P", integer=True, positive=True)
X = sy.MatrixSymbol("X", N, P)
Y = sy.MatrixSymbol("Y", N, P)

example = X * X.T + Y * X.T
# 构造目标表达式
result = (X + Y) * X.T
# 验证等价性
print(sy.expand(result) == example)  # 输出 True

补充说明

对于更复杂的矩阵表达式因式分解,可参考Sympy的sympy.matrices.expressions.factorization模块,但这类简单的右侧公因子提取,collect()已足够高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:43:23