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

如何在SciPy/Numpy中获取整数形式的矩阵零空间

获取零空间的整数形式解

SciPy的null_space函数返回的是归一化的正交基向量,因此默认输出是浮点数形式。如果已知零空间存在整数解,可通过以下两种方式获取整数形式的零空间基:

方法一:用SymPy直接计算整数基

SymPy的符号矩阵支持直接求解整数系数的零空间,无需处理浮点数误差,是最便捷的方式:

import numpy as np
from sympy import Matrix

A = np.array([[1, 2], [3, 6]])
# 将NumPy矩阵转为SymPy符号矩阵
sym_matrix = Matrix(A)
# 求解零空间的整数基
integer_null_space = sym_matrix.nullspace()
# 转换为NumPy数组输出
print(np.array(integer_null_space[0]))

运行结果为[-2 1],正是你需要的最简整数解。

方法二:手动处理SciPy的浮点输出

如果不想引入SymPy,可以对SciPy的输出进行有理数转换和约分:

from scipy.linalg import null_space
import numpy as np
from fractions import Fraction

A = np.array([[1, 2], [3, 6]])
# 获取归一化的零空间基并展平
float_basis = null_space(A).flatten()
# 将浮点数转换为分数形式,消除精度误差
frac_ratio = Fraction(float_basis[0]/float_basis[1]).limit_denominator()
# 构造整数向量
integer_vec = np.array([frac_ratio.numerator, frac_ratio.denominator], dtype=int)
# 确保向量是最简形式(若有公因数可进一步约分)
gcd_val = np.gcd.reduce(integer_vec)
if gcd_val != 1:
    integer_vec = integer_vec // gcd_val
print(integer_vec)

该方法通过fractions.Fraction将浮点比例转为最简分数,再构造整数向量,同样能得到[-2 1]。

注意事项

  • 当零空间维度大于1时,需对每个基向量分别执行上述操作,得到一组线性无关的整数基。
  • 手动处理时,若浮点数精度问题导致比例偏离整数,可通过limit_denominator()参数控制分数近似的精度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:15:05