def __init__(self,dim,dicto=None,shifts=None): """ attributes: shifts, dims, data, is1D, length methods : dump """ self.shifts=shifts if type(dim)==type(()) or type(dim)==type([]): self.data = spmatrix.ll_mat(reduce(operator.mul, dim), 1) self.dims = dim if dicto: for k, v in dicto.iteritems(): shk = map(operator.__sub__, k, shifts) self.data[self.comp(shk), 0]=v elif type(dim)==IntType: self.data = spmatrix.ll_mat(dim,1) self.dims = dim if dicto: for k, v in dicto.iteritems(): shk = k - shifts self.data[shk,0] = v self.is1D = type(self.dims)==IntType
def assemble(fname, topo, mapping): nnodes = len(mapping) f = file(fname) A = spmatrix.ll_mat(nnodes, nnodes) M = spmatrix.ll_mat(nnodes, nnodes) for el in topo: n = len(el) matK = readmat(f, n) matV = readmat(f, n) matM = readmat(f, n) el = [mapping[x] for x in el] A.update_add_mask_sym(matK, Numeric.array(el), Numeric.ones(n)) A.update_add_mask_sym(matV, Numeric.array(el), Numeric.ones(n)) M.update_add_mask_sym(matM, Numeric.array(el), Numeric.ones(n)) return A, M
def sparsefeaturematrix(f, sample, format='csc_matrix'): """Returns an (m x n) sparse matrix of non-zero evaluations of the scalar or vector functions f_1,...,f_m in the list f at the points x_1,...,x_n in the sequence 'sample'. If format='ll_mat', the PySparse module (or a symlink to it) must be available in the Python site-packages/ directory. A trimmed-down version, patched for NumPy compatibility, is available in the SciPy sandbox/pysparse directory. """ m = len(f) n = len(sample) if format == 'll_mat': import spmatrix sparseF = spmatrix.ll_mat(m, n) elif format in ('dok_matrix', 'csc_matrix', 'csr_matrix'): sparseF = sparse.dok_matrix((m, n)) else: raise ValueError("sparse matrix format not recognized") for i in xrange(m): f_i = f[i] for j in xrange(n): x = sample[j] f_i_x = f_i(x) if f_i_x != 0: sparseF[i, j] = f_i_x if format == 'csc_matrix': return sparseF.tocsc() elif format == 'csr_matrix': return sparseF.tocsr() else: return sparseF
def sparsefeatures(f, x, format='csc_matrix'): """ Returns an Mx1 sparse matrix of non-zero evaluations of the scalar functions f_1,...,f_m in the list f at the point x. If format='ll_mat', the PySparse module (or a symlink to it) must be available in the Python site-packages/ directory. A trimmed-down version, patched for NumPy compatibility, is available in the SciPy sandbox/pysparse directory. """ m = len(f) if format == 'll_mat': import spmatrix sparsef = spmatrix.ll_mat(m, 1) elif format in ('dok_matrix', 'csc_matrix', 'csr_matrix'): sparsef = sparse.dok_matrix((m, 1)) for i in xrange(m): f_i_x = f[i](x) if f_i_x != 0: sparsef[i, 0] = f_i_x if format == 'csc_matrix': print "Converting to CSC matrix ..." return sparsef.tocsc() elif format == 'csr_matrix': print "Converting to CSR matrix ..." return sparsef.tocsr() else: return sparsef
def sparsefeaturematrix(f, sample, format='csc_matrix'): """Returns an (m x n) sparse matrix of non-zero evaluations of the scalar or vector functions f_1,...,f_m in the list f at the points x_1,...,x_n in the sequence 'sample'. If format='ll_mat', the PySparse module (or a symlink to it) must be available in the Python site-packages/ directory. A trimmed-down version, patched for NumPy compatibility, is available in the SciPy sandbox/pysparse directory. """ m = len(f) n = len(sample) if format == 'll_mat': import spmatrix sparseF = spmatrix.ll_mat(m, n) elif format in ('dok_matrix', 'csc_matrix', 'csr_matrix'): sparseF = sparse.dok_matrix((m, n)) else: raise ValueError("sparse matrix format not recognized") for i in xrange(m): f_i = f[i] for j in xrange(n): x = sample[j] f_i_x = f_i(x) if f_i_x != 0: sparseF[i,j] = f_i_x if format == 'csc_matrix': return sparseF.tocsc() elif format == 'csr_matrix': return sparseF.tocsr() else: return sparseF
def poisson1d(n): L = spmatrix.ll_mat(n, n, 3*n-2) for i in range(n): L[i,i] = 2 if i > 0: L[i,i-1] = -1 if i < n-1: L[i,i+1] = -1 return L
def poisson2d(n): n2 = n*n L = spmatrix.ll_mat(n2, n2, 5*n2-4*n) for i in range(n): for j in range(n): k = i + n*j L[k,k] = 4 if i > 0: L[k,k-1] = -1 if i < n-1: L[k,k+1] = -1 if j > 0: L[k,k-n] = -1 if j < n-1: L[k,k+n] = -1 return L