本文整理汇总了Python中sage.matrix.constructor.Matrix.pivots方法的典型用法代码示例。如果您正苦于以下问题:Python Matrix.pivots方法的具体用法?Python Matrix.pivots怎么用?Python Matrix.pivots使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.matrix.constructor.Matrix
的用法示例。
在下文中一共展示了Matrix.pivots方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: basis_of_short_vectors
# 需要导入模块: from sage.matrix.constructor import Matrix [as 别名]
# 或者: from sage.matrix.constructor.Matrix import pivots [as 别名]
def basis_of_short_vectors(self, show_lengths=False, safe_flag=None):
"""
Return a basis for `ZZ^n` made of vectors with minimal lengths Q(`v`).
OUTPUT: a tuple of vectors, and optionally a tuple of values for
each vector.
EXAMPLES::
sage: Q = DiagonalQuadraticForm(ZZ, [1,3,5,7])
sage: Q.basis_of_short_vectors()
((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1))
sage: Q.basis_of_short_vectors(True)
(((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)), (1, 3, 5, 7))
The returned vectors are immutable::
sage: v = Q.basis_of_short_vectors()[0]
sage: v
(1, 0, 0, 0)
sage: v[0] = 0
Traceback (most recent call last):
...
ValueError: vector is immutable; please change a copy instead (use copy())
"""
if safe_flag is not None:
from sage.misc.superseded import deprecation
deprecation(18673, "The safe_flag argument to basis_of_short_vectors() is deprecated and no longer used")
## Set an upper bound for the number of vectors to consider
Max_number_of_vectors = 10000
## Generate a PARI matrix for the associated Hessian matrix
M_pari = self.__pari__()
## Run through all possible minimal lengths to find a spanning set of vectors
n = self.dim()
M1 = Matrix([[0]])
vec_len = 0
while M1.rank() < n:
vec_len += 1
pari_mat = M_pari.qfminim(vec_len, Max_number_of_vectors)[2]
number_of_vecs = ZZ(pari_mat.matsize()[1])
vector_list = []
for i in range(number_of_vecs):
new_vec = vector([ZZ(x) for x in list(pari_mat[i])])
vector_list.append(new_vec)
## Make a matrix from the short vectors
if len(vector_list) > 0:
M1 = Matrix(vector_list)
## Organize these vectors by length (and also introduce their negatives)
max_len = vec_len // 2
vector_list_by_length = [[] for _ in range(max_len + 1)]
for v in vector_list:
l = self(v)
vector_list_by_length[l].append(v)
vector_list_by_length[l].append(vector([-x for x in v]))
## Make a matrix from the column vectors (in order of ascending length).
sorted_list = []
for i in range(len(vector_list_by_length)):
for v in vector_list_by_length[i]:
sorted_list.append(v)
sorted_matrix = Matrix(sorted_list).transpose()
## Determine a basis of vectors of minimal length
pivots = sorted_matrix.pivots()
basis = tuple(sorted_matrix.column(i) for i in pivots)
for v in basis:
v.set_immutable()
## Return the appropriate result
if show_lengths:
pivot_lengths = tuple(self(v) for v in basis)
return basis, pivot_lengths
else:
return basis