要找到所需的确切解决方案,numpy和scipy可能不是最佳工具。他们的算法通常在浮点中工作,并且不能保证给出 确切的 答案。
您可以
sympy用来获取此问题的确切答案。中的
Matrix类
sympy提供了
nullspace()返回空空间基向量列表的方法。这是一个例子:
In [20]: from sympy import Matrix, lcmIn [21]: A = Matrix([[1, -1, 0], [0, 2, -1], [2, 0, -1]])
获取空空间中的向量。
nullspace()返回列表;此代码假定A的等级为2,因此列表的长度为1:
In [22]: v = A.nullspace()[0]In [23]: vOut[23]: Matrix([[1/2],[1/2],[ 1]])
在中找到值的分母的最小公倍数,
v以便我们可以将结果缩放为最小整数:
In [24]: m = lcm([val.q for val in v])In [25]: mOut[25]: 2
x持有整数答案:
In [26]: x = m*vIn [27]: xOut[27]: Matrix([[1],[1],[2]])
要将结果转换为整数的numpy数组,可以执行以下操作:
In [52]: np.array([int(val) for val in x])Out[52]: array([1, 1, 2])



