def norm(x, order=None): '''Matrix or vector norm x -- input array ord -- None = Frobenius | 2-norm 'fro' = Frobenius | n/a inf = max(sum(abs(x),axis=1)) | max(abs(x)) -inf = min(sum(abs(x),axis=1)) | min(abs(x)) 0 = n/a | sum(x != 0) 1 = max(sum(abs(x),axis=0)) | as below -1 = min(sum(abs(x),axis=0)) | as below 2 = 2-norm (largest s.v.) | as below -2 = smallest singular value | as below other = n/a | sum(abs(x)**ord)**(1./ord) Return norm ''' if order is None: return _linalg.norm(x) if order == 'fro': order = _normorder.FROBENIUS # @UndefinedVariable elif _isinf(order): if order > 0: order = _normorder.POS_INFINITY # @UndefinedVariable else: order = _normorder.NEG_INFINITY # @UndefinedVariable try: return _linalg.norm(x, order) except Exception, e: raise LinAlgError(e)
def norm(x, order=None): """Matrix or vector norm x -- input array ord -- None = Frobenius | 2-norm 'fro' = Frobenius | n/a inf = max(sum(abs(x),axis=1)) | max(abs(x)) -inf = min(sum(abs(x),axis=1)) | min(abs(x)) 0 = n/a | sum(x != 0) 1 = max(sum(abs(x),axis=0)) | as below -1 = min(sum(abs(x),axis=0)) | as below 2 = 2-norm (largest s.v.) | as below -2 = smallest singular value | as below other = n/a | sum(abs(x)**ord)**(1./ord) Return norm """ if order is None: return _linalg.norm(x) if order == "fro": order = _normorder.FROBENIUS # @UndefinedVariable elif _isinf(order): if order > 0: order = _normorder.POS_INFINITY # @UndefinedVariable else: order = _normorder.NEG_INFINITY # @UndefinedVariable try: return _linalg.norm(x, order) except Exception, e: raise LinAlgError(e)
def tensordot(a, b, axes=2): '''Tensor dot product of two arrays ''' if isinstance(axes, int): bx = range(axes) ao = a.getRank() - axes ax = [ ao + i for i in bx ] else: t = type(axes) if t is _types.ListType or t is _types.TupleType: if len(axes) == 0: raise ValueError, "Given axes sequence should be non-empty" if len(axes) == 1: ax = axes[0] bx = axes[0] else: ax = axes[0] bx = axes[1] ta = type(ax) tal = ta is _types.ListType or ta is _types.TupleType tb = type(bx) tbl = tb is _types.ListType or tb is _types.TupleType if tal != tbl: if tal: bx = list(bx) else: ax = list(ax) else: raise ValueError, "Given axes has wrong type" return _linalg.tensorDotProduct(a, b, ax, bx)
def svd(a, full_matrices=1, compute_uv=1): """Singular value decomposition """ try: return _linalg.calcSingularValueDecomposition(a) except Exception, e: raise LinAlgError(e)
def tensordot(a, b, axes=2): '''Tensor dot product of two arrays ''' if isinstance(axes, int): bx = range(axes) ao = a.getRank() - axes ax = [ao + i for i in bx] else: t = type(axes) if t is _types.ListType or t is _types.TupleType: if len(axes) == 0: raise ValueError, "Given axes sequence should be non-empty" if len(axes) == 1: ax = axes[0] bx = axes[0] else: ax = axes[0] bx = axes[1] ta = type(ax) tal = ta is _types.ListType or ta is _types.TupleType tb = type(bx) tbl = tb is _types.ListType or tb is _types.TupleType if tal != tbl: if tal: bx = list(bx) else: ax = list(ax) else: raise ValueError, "Given axes has wrong type" return _linalg.tensorDotProduct(a, b, ax, bx)
def trace(a, offset=0, axis1=0, axis2=1, dtype=None): if dtype is None: dtype = a.getDtype() else: dtype = dtype.value return _linalg.trace(a, offset).cast(dtype)
def svd(a, full_matrices=1, compute_uv=1): '''Singular value decomposition ''' try: return _linalg.calcSingularValueDecomposition(a) except Exception, e: raise LinAlgError(e)
def qr(a, mode='full'): '''QR decomposition ''' try: return _linalg.calcQRDecomposition(a) except Exception, e: raise LinAlgError(e)
def cholesky(a): '''Cholesky decomposition ''' try: return _linalg.calcCholeskyDecomposition(a) except Exception, e: raise LinAlgError(e)
def eigvals(a): '''Eigenvalues ''' try: return _linalg.calcEigenvalues(a) except Exception, e: raise LinAlgError(e)
def eig(a): '''Eigen decomposition ''' try: return _linalg.calcEigenDecomposition(a) except Exception, e: raise LinAlgError(e)
def matrix_power(a, n): '''Raise matrix to given power ''' try: return _linalg.power(a, n) except Exception, e: raise LinAlgError(e)
def pinv(a, rcond=1e-15): '''Pseudo-inverse of array ''' try: return _linalg.calcPseudoInverse(a) except Exception, e: raise LinAlgError(e)
def inv(a): '''Inverse of square array ''' try: return _linalg.calcInverse(a) except Exception, e: raise LinAlgError(e)
def solve(a, b): '''Solve equation a x = b ''' try: return _linalg.solve(a, b) except Exception, e: raise LinAlgError(e)
def trace(a, offset=0, axis1=0, axis2=1, dtype=None): if dtype is None: dtype = a.getDtype() else: dtype = dtype.value return _linalg.trace(a, offset).cast(dtype)
def qr(a, mode="full"): """QR decomposition """ try: return _linalg.calcQRDecomposition(a) except Exception, e: raise LinAlgError(e)
def cholesky(a): """Cholesky decomposition """ try: return _linalg.calcCholeskyDecomposition(a) except Exception, e: raise LinAlgError(e)
def eig(a): """Eigen decomposition """ try: return _linalg.calcEigenDecomposition(a) except Exception, e: raise LinAlgError(e)
def eigvals(a): """Eigenvalues """ try: return _linalg.calcEigenvalues(a) except Exception, e: raise LinAlgError(e)
def pinv(a, rcond=1e-15): """Pseudo-inverse of array """ try: return _linalg.calcPseudoInverse(a) except Exception, e: raise LinAlgError(e)
def matrix_power(a, n): """Raise matrix to given power """ try: return _linalg.power(a, n) except Exception, e: raise LinAlgError(e)
def inv(a): """Inverse of square array """ try: return _linalg.calcInverse(a) except Exception, e: raise LinAlgError(e)
def solve(a, b): """Solve equation a x = b """ try: return _linalg.solve(a, b) except Exception, e: raise LinAlgError(e)
def det(a): """Determinant """ try: return _linalg.calcDeterminant(a) except Exception, e: raise LinAlgError(e)
def det(a): '''Determinant ''' try: return _linalg.calcDeterminant(a) except Exception, e: raise LinAlgError(e)
def cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None): '''Cross product of two (arrays of vectors) a -- first vector b -- second vector axisa -- axis of a that defines the vector(s) axisb -- axis of b that defines the vector(s) axisc -- axis of c that will contain the cross product(s) axis -- override all values of axis values ''' if axis is not None: axisa = axisb = axisc = axis return _linalg.crossProduct(a, b, axisa, axisb, axisc)
def cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None): '''Cross product of two (arrays of vectors) a -- first vector b -- second vector axisa -- axis of a that defines the vector(s) axisb -- axis of b that defines the vector(s) axisc -- axis of c that will contain the cross product(s) axis -- override all values of axis values ''' if axis is not None: axisa = axisb = axisc = axis return _linalg.crossProduct(a, b, axisa, axisb, axisc)
def cond(a, order=None): """Condition number x -- input array ord -- None = 2-norm computed directly using SVD 'fro' = Frobenius norm inf = max(sum(abs(x),axis=1)) -inf = min(sum(abs(x),axis=1)) 0 = n/a | sum(x != 0) 1 = max(sum(abs(x),axis=0)) -1 = min(sum(abs(x),axis=0)) 2 = 2-norm (largest s.v.) -2 = smallest singular value other = n/a Return norm """ if order is None: try: return _linalg.calcConditionNumber(_jinput(a)) except Exception, e: raise LinAlgError(e)
def cond(a, order=None): '''Condition number x -- input array ord -- None = 2-norm computed directly using SVD 'fro' = Frobenius norm inf = max(sum(abs(x),axis=1)) -inf = min(sum(abs(x),axis=1)) 0 = n/a | sum(x != 0) 1 = max(sum(abs(x),axis=0)) -1 = min(sum(abs(x),axis=0)) 2 = 2-norm (largest s.v.) -2 = smallest singular value other = n/a Return norm ''' if order is None: try: return _linalg.calcConditionNumber(_jinput(a)) except Exception, e: raise LinAlgError(e)
def dot(a, b): '''Dot product of two arrays''' return _linalg.dotProduct(a, b)
def vdot(a, b): '''Dot product of two vectors with first vector conjugated if complex''' return _linalg.dotProduct(conjugate(a.flatten()), b.flatten())
def inner(a, b): '''Inner product of two arrays (sum product over last dimensions)''' return _linalg.tensorDotProduct(a, b, -1, -1)
def vdot(a, b): '''Dot product of two vectors with first vector conjugated if complex''' return _linalg.dotProduct(conjugate(a.flatten()), b.flatten())
def dot(a, b): '''Dot product of two arrays''' return _linalg.dotProduct(a, b)
def inner(a, b): '''Inner product of two arrays (sum product over last dimensions)''' return _linalg.tensorDotProduct(a, b, -1, -1)