def tobsr(self, blocksize=None, copy=True): from bsr import bsr_matrix if blocksize is None: from spfuncs import estimate_blocksize return self.tobsr(blocksize=estimate_blocksize(self)) elif blocksize == (1,1): arg1 = (self.data.reshape(-1,1,1),self.indices,self.indptr) return bsr_matrix(arg1, shape=self.shape, copy=copy ) else: R,C = blocksize M,N = self.shape if R < 1 or C < 1 or M % R != 0 or N % C != 0: raise ValueError('invalid blocksize %s' % blocksize) blks = csr_count_blocks(M,N,R,C,self.indptr,self.indices) indptr = np.empty(M/R + 1, dtype=np.intc) indices = np.empty(blks, dtype=np.intc) data = np.zeros((blks,R,C), dtype=self.dtype) csr_tobsr(M, N, R, C, self.indptr, self.indices, self.data, \ indptr, indices, data.ravel() ) return bsr_matrix((data,indices,indptr), shape=self.shape)
def tobsr(self, blocksize=None, copy=True): from bsr import bsr_matrix if blocksize is None: from spfuncs import estimate_blocksize return self.tobsr(blocksize=estimate_blocksize(self)) elif blocksize == (1, 1): arg1 = (self.data.reshape(-1, 1, 1), self.indices, self.indptr) return bsr_matrix(arg1, shape=self.shape, copy=copy) else: R, C = blocksize M, N = self.shape if R < 1 or C < 1 or M % R != 0 or N % C != 0: raise ValueError('invalid blocksize %s' % blocksize) blks = csr_count_blocks(M, N, R, C, self.indptr, self.indices) indptr = np.empty(M // R + 1, dtype=np.intc) indices = np.empty(blks, dtype=np.intc) data = np.zeros((blks, R, C), dtype=self.dtype) csr_tobsr(M, N, R, C, self.indptr, self.indices, self.data, \ indptr, indices, data.ravel() ) return bsr_matrix((data, indices, indptr), shape=self.shape)
def count_blocks(A,blocksize): """For a given blocksize=(r,c) count the number of occupied blocks in a sparse matrix A """ r,c = blocksize if r < 1 or c < 1: raise ValueError,'r and c must be positive' if isspmatrix_csr(A): M,N = A.shape return csr_count_blocks(M,N,r,c,A.indptr,A.indices) elif isspmatrix_csc(A): return count_blocks(A.T,(c,r)) else: return count_blocks(csr_matrix(A),blocksize)
def count_blocks(A, blocksize): """For a given blocksize=(r,c) count the number of occupied blocks in a sparse matrix A """ r, c = blocksize if r < 1 or c < 1: raise ValueError('r and c must be positive') if isspmatrix_csr(A): M, N = A.shape return csr_count_blocks(M, N, r, c, A.indptr, A.indices) elif isspmatrix_csc(A): return count_blocks(A.T, (c, r)) else: return count_blocks(csr_matrix(A), blocksize)