def mean_var_test(x, type, mean, var, skew=[], mean_ans=None, var_ans=None, skew_ans=None, eps=1e-9): if mean_ans is None or var_ans is None: raise ValueError, "Invalid test parameters" n = len(x) * 1.0 x_mean = num.sum(x)/n x_minus_mean = x - x_mean x_var = num.sum(x_minus_mean*x_minus_mean)/(n-1.0) case(x_mean, mean_ans, eps) case(x_var, var_ans, eps) if skew != []: x_skew = (num.sum(x_minus_mean*x_minus_mean*x_minus_mean)/9998.)/x_var**(3./2.) case(x_skew, skew_ans, eps)
def mean_var_test(x, type, mean, var, skew=[], mean_ans=None, var_ans=None, skew_ans=None, eps=1e-9): if mean_ans is None or var_ans is None: raise ValueError, "Invalid test parameters" n = len(x) * 1.0 x_mean = num.sum(x) / n x_minus_mean = x - x_mean x_var = num.sum(x_minus_mean * x_minus_mean) / (n - 1.0) case(x_mean, mean_ans, eps) case(x_var, var_ans, eps) if skew != []: x_skew = (num.sum(x_minus_mean * x_minus_mean * x_minus_mean) / 9998.) / x_var**(3. / 2.) case(x_skew, skew_ans, eps)
def linear_least_squares(a, b, rcond=1.e-10): """solveLinearLeastSquares(a,b) 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 an rank of the singual values of A in desending 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 numer 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. """ one_eq = len(b.getshape()) == 1 if one_eq: b = b[:, num.NewAxis] _assertRank2(a, b) m = a.getshape()[0] n = a.getshape()[1] n_rhs = b.getshape()[1] ldb = max(n,m) if m != b.getshape()[0]: raise LinAlgError, 'Incompatible dimensions' t =_commonType(a, b) real_t = _array_type[0][_array_precision[t]] bstar = num.zeros((ldb,n_rhs),t) bstar[:b.getshape()[0],:n_rhs] = copy.copy(b) a,bstar = _castCopyAndTranspose(t, a, bstar) s = num.zeros((min(m,n),),real_t) nlvl = max( 0, int( math.log( float(min( m,n ))/2. ) ) + 1 ) iwork = num.zeros((3*min(m,n)*nlvl+11*min(m,n),), 'l') if _array_kind[t] == 1: # Complex routines take different arguments lapack_routine = lapack_lite2.zgelsd lwork = 1 rwork = num.zeros((lwork,), real_t) work = num.zeros((lwork,),t) results = lapack_routine( m, n, n_rhs, a, m, bstar,ldb , s, rcond, 0,work,-1,rwork,iwork,0 ) lwork = int(abs(work[0])) rwork = num.zeros((lwork,),real_t) a_real = num.zeros((m,n),real_t) bstar_real = num.zeros((ldb,n_rhs,),real_t) results = lapack_lite2.dgelsd( m, n, n_rhs, a_real, m, bstar_real,ldb , s, rcond, 0,rwork,-1,iwork,0 ) lrwork = int(rwork[0]) work = num.zeros((lwork,), t) rwork = num.zeros((lrwork,), real_t) results = lapack_routine( m, n, n_rhs, a, m, bstar,ldb , s, rcond, 0,work,lwork,rwork,iwork,0 ) else: lapack_routine = lapack_lite2.dgelsd lwork = 1 work = num.zeros((lwork,), t) results = lapack_routine( m, n, n_rhs, a, m, bstar,ldb , s, rcond, 0,work,-1,iwork,0 ) lwork = int(work[0]) work = num.zeros((lwork,), t) results = lapack_routine( m, n, n_rhs, a, m, bstar,ldb , s, rcond, 0,work,lwork,iwork,0 ) if results['info'] > 0: raise LinAlgError, 'SVD did not converge in Linear Least Squares' resids = num.array([],type=t) if one_eq: x = copy.copy(num.ravel(bstar)[:n]) if (results['rank']==n) and (m>n): resids = num.array([num.sum((num.ravel(bstar)[n:])**2)]) else: x = copy.copy(num.transpose(bstar)[:n,:]) if (results['rank']==n) and (m>n): resids = copy.copy(num.sum((num.transpose(bstar)[n:,:])**2)) return x,resids,results['rank'],copy.copy(s[:min(n,m)])