]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
cone/symmetric_psd.py: use a generator expression in unit_eigenvectors().
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 4 Nov 2018 06:36:39 +0000 (01:36 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 4 Nov 2018 06:36:39 +0000 (01:36 -0500)
mjo/cone/symmetric_psd.py

index ef5d477ce67aa4f40a3466c48904888ddfaa840b..68be78fbdd53630303e5b409727fa686d8ad7e32 100644 (file)
@@ -69,12 +69,15 @@ def unit_eigenvectors(A):
 
     INPUT:
 
-    - ``A`` - The matrix whose eigenvectors we want to compute.
+    - ``A`` -- The matrix whose unit eigenvectors we want to compute.
 
     OUTPUT:
 
     A list of (eigenvalue, eigenvector) pairs where each eigenvector is
-    associated with its paired eigenvalue of ``A`` and has norm `1`.
+    associated with its paired eigenvalue of ``A`` and has norm `1`. If
+    the base ring of ``A`` is not algebraically closed, then returned
+    eigenvectors may (necessarily) be over its algebraic closure and not
+    the base ring of ``A`` itself.
 
     SETUP::
 
@@ -83,7 +86,7 @@ def unit_eigenvectors(A):
     EXAMPLES::
 
         sage: A = matrix(QQ, [[0, 2, 3], [2, 0, 0], [3, 0, 0]])
-        sage: unit_evs = unit_eigenvectors(A)
+        sage: unit_evs = list(unit_eigenvectors(A))
         sage: bool(unit_evs[0][1].norm() == 1)
         True
         sage: bool(unit_evs[1][1].norm() == 1)
@@ -92,17 +95,9 @@ def unit_eigenvectors(A):
         True
 
     """
-    # This will give us a list of lists whose elements are the
-    # eigenvectors we want.
-    ev_lists = [ (val,vecs) for (val,vecs,multiplicity)
-                            in A.eigenvectors_right() ]
-
-    # Pair each eigenvector with its eigenvalue and normalize it.
-    evs = [ [(l, vec/vec.norm()) for vec in vecs] for (l,vecs) in ev_lists ]
-
-    # Flatten the list, abusing the fact that "+" is overloaded on lists.
-    return sum(evs, [])
-
+    return ( (val,vec.normalized())
+             for (val,vecs,multiplicity) in A.eigenvectors_right()
+             for vec in vecs )