您可以使用^{}。在
例如,下面是一个numpy整数数组:In [148]: m = np.array([[10, 11, 0, 0], [9, 10, 0, 0], [100, 0, 20, 3], [-10000, 200, 133, 20]])
In [149]: m
Out[149]:
array([[ 10, 11, 0, 0],
[ 9, 10, 0, 0],
[ 100, 0, 20, 3],
[-10000, 200, 133, 20]])
精确的行列式是1,但是np.linalg.det()和np.linalg.inv()都会引入浮点错误:
^{pr2}$
从numpy数组创建一个sypy ^{}对象:In [156]: import sympy
In [157]: M = sympy.Matrix(m)
In [158]: M
Out[158]:
Matrix([
[ 10, 11, 0, 0],
[ 9, 10, 0, 0],
[ 100, 0, 20, 3],
[-10000, 200, 133, 20]])
sympy计算是精确的:In [159]: M.det()
Out[159]: 1
In [160]: M.inv()
Out[160]:
Matrix([
[ 10, -11, 0, 0],
[ -9, 10, 0, 0],
[-325400, 358000, 20, -3],
[2169000, -2386300, -133, 20]])
要将逆矩阵转换回numpy数组,可以执行以下操作:In [185]: Minv = M.inv()
In [186]: minv = np.asarray(Minv).astype(int)
In [187]: minv
Out[187]:
array([[ 10, -11, 0, 0],
[ -9, 10, 0, 0],
[ -325400, 358000, 20, -3],
[ 2169000, -2386300, -133, 20]])
必须使用astype(int)方法,因为numpy数组中没有object的数据类型:In [188]: np.asarray(Minv)
Out[188]:
array([[10, -11, 0, 0],
[-9, 10, 0, 0],
[-325400, 358000, 20, -3],
[2169000, -2386300, -133, 20]], dtype=object)
这个结果是一个整数的整数数组。在
在转换回numpy时要小心:逆整数可能比用64位整数表示的大。在