diff options
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/lib/convertcode.py | 3 | ||||
-rw-r--r-- | numpy/linalg/linalg.py | 69 | ||||
-rw-r--r-- | numpy/linalg/old.py | 86 |
3 files changed, 108 insertions, 50 deletions
diff --git a/numpy/lib/convertcode.py b/numpy/lib/convertcode.py index 38504d5a2..8587993c4 100644 --- a/numpy/lib/convertcode.py +++ b/numpy/lib/convertcode.py @@ -99,7 +99,8 @@ def fromstr(filestr): filestr, fromall2 = changeimports(filestr, 'numerix', 'numpy') filestr, fromall3 = changeimports(filestr, 'numpy_base', 'numpy') filestr, fromall3 = changeimports(filestr, 'MLab', 'numpy.lib.mlab') - filestr, fromall3 = changeimports(filestr, 'LinearAlgebra', 'numpy.linalg') + filestr, fromall3 = changeimports(filestr, 'LinearAlgebra', + 'numpy.linalg.old') filestr, fromall3 = changeimports(filestr, 'RNG', 'numpy.random') filestr, fromall3 = changeimports(filestr, 'RandomArray', 'numpy.random') filestr, fromall3 = changeimports(filestr, 'FFT', 'numpy.dft') diff --git a/numpy/linalg/linalg.py b/numpy/linalg/linalg.py index f15931a7c..7c9c50586 100644 --- a/numpy/linalg/linalg.py +++ b/numpy/linalg/linalg.py @@ -6,22 +6,18 @@ # only accesses the following LAPACK functions: dgesv, zgesv, dgeev, # zgeev, dgesdd, zgesdd, dgelsd, zgelsd, dsyevd, zheevd, dgetrf, dpotrf. -__all__ = ['LinAlgError', 'solve_linear_equations', 'solve', - 'inverse', 'inv', 'cholesky_decomposition', 'cholesky', 'eigenvalues', - 'eigvals', 'Heigenvalues', 'eigvalsh', 'generalized_inverse', 'pinv', - 'determinant', 'det', 'singular_value_decomposition', 'svd', - 'eigenvectors', 'eig', 'Heigenvectors', 'eigh','lstsq', 'norm', - 'linear_least_squares' +__all__ = ['solve', + 'inv', 'cholesky', + 'eigvals', + 'eigvalsh', 'pinv', + 'det', 'svd', + 'eig', 'eigh','lstsq', 'norm', ] from numpy.core import * from numpy.lib import * import lapack_lite -# Error object -class LinAlgError(Exception): - pass - # Helper routines _lapack_type = {'f': 0, 'd': 1, 'F': 2, 'D': 3} _lapack_letter = ['s', 'd', 'c', 'z'] @@ -78,10 +74,9 @@ def _assertSquareness(*arrays): if max(a.shape) != min(a.shape): raise LinAlgError, 'Array must be square' - # Linear equations -def solve_linear_equations(a, b): +def solve(a, b): one_eq = len(b.shape) == 1 if one_eq: b = b[:, NewAxis] @@ -110,14 +105,13 @@ def solve_linear_equations(a, b): # Matrix inversion -def inverse(a): +def inv(a): a, wrap = _makearray(a) return wrap(solve_linear_equations(a, identity(a.shape[0]))) - # Cholesky decomposition -def cholesky_decomposition(a): +def cholesky(a): _assertRank2(a) _assertSquareness(a) t =_commonType(a) @@ -135,8 +129,7 @@ def cholesky_decomposition(a): # Eigenvalues - -def eigenvalues(a): +def eigvals(a): _assertRank2(a) _assertSquareness(a) t =_commonType(a) @@ -177,7 +170,7 @@ def eigenvalues(a): return w -def Heigenvalues(a, UPLO='L'): +def eigvalsh(a, UPLO='L'): _assertRank2(a) _assertSquareness(a) t =_commonType(a) @@ -390,7 +383,7 @@ def svd(a, full_matrices=1, compute_uv=1): # Generalized inverse -def generalized_inverse(a, rcond = 1.e-10): +def pinv(a, rcond = 1.e-10): a, wrap = _makearray(a) if a.dtype.char in typecodes['Complex']: a = conjugate(a) @@ -408,7 +401,7 @@ def generalized_inverse(a, rcond = 1.e-10): # Determinant -def determinant(a): +def det(a): a = asarray(a) _assertRank2(a) _assertSquareness(a) @@ -427,7 +420,7 @@ def determinant(a): # Linear Least Squares -def linear_least_squares(a, b, rcond=1.e-10): +def lstsq(a, b, rcond=1.e-10): """returns x,resids,rank,s where x minimizes 2-norm(|b - Ax|) resids is the sum square residuals @@ -502,17 +495,6 @@ Singular values less than s[0]*rcond are treated as zero. resids = sum((transpose(bstar)[n:,:])**2).copy() return wrap(x),resids,results['rank'],s[:min(n,m)].copy() -def singular_value_decomposition(A, full_matrices=0): - return svd(A, full_matrices) - -def eigenvectors(A): - w, v = eig(A) - return w, transpose(v) - -def Heigenvectors(A): - w, v = eigh(A) - return w, transpose(v) - def norm(x, ord=None): """ norm(x, ord=None) -> n @@ -580,33 +562,22 @@ def norm(x, ord=None): else: raise ValueError, "Improper number of dimensions to norm." - - -inv = inverse -solve = solve_linear_equations -cholesky = cholesky_decomposition -eigvals = eigenvalues -eigvalsh = Heigenvalues -pinv = generalized_inverse -det = determinant -lstsq = linear_least_squares - if __name__ == '__main__': def test(a, b): print "All numbers printed should be (almost) zero:" - x = solve_linear_equations(a, b) + x = solve(a, b) check = b - matrixmultiply(a, x) print check - a_inv = inverse(a) + a_inv = inv(a) check = matrixmultiply(a, a_inv)-identity(a.shape[0]) print check - ev = eigenvalues(a) + ev = eigvals(a) evalues, evectors = eig(a) check = ev-evalues @@ -622,16 +593,16 @@ if __name__ == '__main__': print check - a_ginv = generalized_inverse(a) + a_ginv = pinv(a) check = matrixmultiply(a, a_ginv)-identity(a.shape[0]) print check - det = determinant(a) + det = det(a) check = det-multiply.reduce(evalues) print check - x, residuals, rank, sv = linear_least_squares(a, b) + x, residuals, rank, sv = lstsq(a, b) check = b - matrixmultiply(a, x) print check print rank-a.shape[0] diff --git a/numpy/linalg/old.py b/numpy/linalg/old.py new file mode 100644 index 000000000..d66051939 --- /dev/null +++ b/numpy/linalg/old.py @@ -0,0 +1,86 @@ + +"""Backward compatible with LinearAlgebra from Numeric +""" +# This module is a lite version of the linalg.py module in SciPy which contains +# high-level Python interface to the LAPACK library. The lite version +# only accesses the following LAPACK functions: dgesv, zgesv, dgeev, +# zgeev, dgesdd, zgesdd, dgelsd, zgelsd, dsyevd, zheevd, dgetrf, dpotrf. + + +__all__ = ['LinAlgError', 'solve_linear_equations', + 'inverse', 'cholesky_decomposition', 'eigenvalues', + 'Heigenvalues', 'generalized_inverse', + 'determinant', 'singular_value_decomposition', + 'eigenvectors', 'Heigenvectors', + 'linear_least_squares' + ] + +from numpy.core import transpose +import numpy.linalg as linalg + +# Error object +class LinAlgError(Exception): + pass + +# Linear equations + +def solve_linear_equations(a, b): + return linalg.solve(a,b) + +# Matrix inversion + +def inverse(a): + return linalg.inv(a) + +# Cholesky decomposition + +def cholesky_decomposition(a): + return linalg.cholesky(a) + +# Eigenvalues + +def eigenvalues(a): + return linalg.eigvals(a) + +def Heigenvalues(a, UPLO='L'): + return linalg.eigvalsh(a,UPLO) + +# Eigenvectors + +def eigenvectors(A): + w, v = linalg.eig(A) + return w, transpose(v) + +def Heigenvectors(A): + w, v = linalg.eigh(A) + return w, transpose(v) + +# Generalized inverse + +def generalized_inverse(a, rcond = 1.e-10): + return linalg.pinv(a, rcond) + +# Determinant + +def determinant(a): + return linalg.det(a) + +# Linear Least Squares + +def linear_least_squares(a, b, rcond=1.e-10): + """returns x,resids,rank,s +where x minimizes 2-norm(|b - Ax|) + resids is the sum square residuals + rank is the rank of A + s is the rank of the singular values of A in descending order + +If b is a matrix then x is also a matrix with corresponding columns. +If the rank of A is less than the number of columns of A or greater than +the number of rows, then residuals will be returned as an empty array +otherwise resids = sum((b-dot(A,x)**2). +Singular values less than s[0]*rcond are treated as zero. +""" + return linalg.lstsq(a,b,rcond) + +def singular_value_decomposition(A, full_matrices=0): + return linalg.svd(A, full_matrices) |