X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=dunshire%2Fmatrices.py;h=6d5bbc8f667dce05feb93ec9fabcf42340f1157e;hb=299bf2d606eb245ec78f2e20826836c0bb5bfc07;hp=2d4bb17c98a9187e2cacaa0094ef9c0cfe3c4600;hpb=ed86c0467de2f8903d9a18c28fa478412cd9a52e;p=dunshire.git diff --git a/dunshire/matrices.py b/dunshire/matrices.py index 2d4bb17..6d5bbc8 100644 --- a/dunshire/matrices.py +++ b/dunshire/matrices.py @@ -3,6 +3,7 @@ Utility functions for working with CVXOPT matrices (instances of the class:`cvxopt.base.matrix` class). """ +from copy import copy from math import sqrt from cvxopt import matrix from cvxopt.lapack import gees, gesdd, syevr @@ -140,7 +141,10 @@ def eigenvalues(symmat): domain_dim = symmat.size[0] eigs = matrix(0, (domain_dim, 1), tc='d') - syevr(symmat, eigs) + + # Create a copy of ``symmat`` here because ``syevr`` clobbers it. + dummy = copy(symmat) + syevr(dummy, eigs) return list(eigs) @@ -326,12 +330,12 @@ def norm(matrix_or_vector): -------- >>> v = matrix([1,1]) - >>> print('{:.5f}'.format(norm(v))) - 1.41421 + >>> norm(v) + 1.414... >>> A = matrix([1,1,1,1], (2,2)) >>> norm(A) - 2.0 + 2.0... """ return sqrt(inner_product(matrix_or_vector, matrix_or_vector)) @@ -418,10 +422,6 @@ def condition_number(mat): Examples -------- - >>> condition_number(identity(1, typecode='d')) - 1.0 - >>> condition_number(identity(2, typecode='d')) - 1.0 >>> condition_number(identity(3, typecode='d')) 1.0 @@ -435,7 +435,7 @@ def condition_number(mat): """ num_eigs = min(mat.size) - eigs = matrix(0, (num_eigs,1), tc='d') + eigs = matrix(0, (num_eigs, 1), tc='d') gesdd(mat, eigs) if len(eigs) > 0: