Python 3.x Sage给了我一个关于线性拟阵的错误秩的基,或者,我做错了什么?
下面是一个简单的工作示例:Python 3.x Sage给了我一个关于线性拟阵的错误秩的基,或者,我做错了什么?,python-3.x,sage,Python 3.x,Sage,下面是一个简单的工作示例: import numpy as np import sage D = np.array([[-1., -1., -1., 0., 0., 0., 1.], [ 1., 0., 0., -1., 1., 0., 0.], [ 0., 1., 0., 0., -1., 1., 0.], [ 0., 0., 1., 0., 0., -1., 0.], [ 0., 0., 0.
import numpy as np
import sage
D = np.array([[-1., -1., -1., 0., 0., 0., 1.],
[ 1., 0., 0., -1., 1., 0., 0.],
[ 0., 1., 0., 0., -1., 1., 0.],
[ 0., 0., 1., 0., 0., -1., 0.],
[ 0., 0., 0., 1., 0., 0., -1.],
[ 1., 1., 1., 1., 1., 1., 1.]])
I = Matrix(D)
M = Matroid(I)
for base in M.bases():
A = I[:, list(base) ]
print(np.linalg.matrix_rank(A))
if np.linalg.matrix_rank(A) == 4:
print(base)
当我在我的计算机上运行这个程序时,它告诉我其中一个基的秩是4,而不是5。M.rank()验证5是拟阵的秩,实际上大多数基都是该秩。然而,在拟阵中,所有的基都是同一秩的,所以我对到底出了什么问题感到困惑
该基是{0,1,3,4,6},它给出了矩阵:
array([[-1., -1., 0., 0., 1.],
[ 1., 0., -1., 1., 0.],
[ 0., 1., 0., -1., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., -1.],
[ 1., 1., 1., 1., 1.]])
哪一个可以单独检查有排名4。(例如,使用。)还可以验证我是否正确地切割了I
我研究的另一种可能性是,当传递到拟阵类时,列顺序是否混淆了。但是,调用M.representation()返回矩阵D,因此我认为情况并非如此。这是一个浮点问题。如果你使用
D = np.array([
[-1, -1, -1, 0, 0, 0, 1],
[ 1, 0, 0, -1, 1, 0, 0],
[ 0, 1, 0, 0, -1, 1, 0],
[ 0, 0, 1, 0, 0, -1, 0],
[ 0, 0, 0, 1, 0, 0, -1],
[ 1, 1, 1, 1, 1, 1, 1]])
那么问题就不会发生了