def __add__(self, other): # First check if argument is a scalar if isscalarlike(other): new = dok_matrix(self.shape, dtype=self.dtype) # Add this scalar to every element. M, N = self.shape for i in xrange(M): for j in xrange(N): aij = self.get((i, j), 0) + other if aij != 0: new[i, j] = aij #new.dtype.char = self.dtype.char elif isinstance(other, dok_matrix): if other.shape != self.shape: raise ValueError("matrix dimensions are not equal") # We could alternatively set the dimensions to the the largest of # the two matrices to be summed. Would this be a good idea? new = dok_matrix(self.shape, dtype=self.dtype) new.update(self) for key in other.keys(): new[key] += other[key] elif isspmatrix(other): csc = self.tocsc() new = csc + other elif isdense(other): new = self.todense() + other else: raise TypeError("data type not understood") return new
def __radd__(self, other): # First check if argument is a scalar if isscalarlike(other): new = dok_matrix(self.shape, dtype=self.dtype) # Add this scalar to every element. M, N = self.shape for i in xrange(M): for j in xrange(N): aij = self.get((i, j), 0) + other if aij != 0: new[i, j] = aij elif isinstance(other, dok_matrix): if other.shape != self.shape: raise ValueError("matrix dimensions are not equal") new = dok_matrix(self.shape, dtype=self.dtype) new.update(self) for key in other: new[key] += other[key] elif isspmatrix(other): csc = self.tocsc() new = csc + other elif isdense(other): new = other + self.todense() else: raise TypeError("data type not understood") return new
def multiply(self, other): """Point-wise multiplication by another matrix """ if other.shape != self.shape: raise ValueError('inconsistent shapes') if isdense(other): return np.multiply(self.todense(), other) else: other = self.__class__(other) return self._binopt(other, '_elmul_')
def __rsub__(self,other): # other - self #note: this can't be replaced by other + (-self) for unsigned types if isscalarlike(other): # Now we would add this scalar to every element. raise NotImplementedError, 'adding a scalar to a sparse ' \ 'matrix is not supported' elif isdense(other): # Convert this matrix to a dense matrix and subtract them return other - self.todense() else: raise NotImplementedError
def multiply(self, other): """Point-wise multiplication by another matrix """ if other.shape != self.shape: raise ValueError('inconsistent shapes') if isdense(other): return np.multiply(self.todense(),other) else: other = self.__class__(other) return self._binopt(other,'_elmul_')
def __sub__(self,other): # First check if argument is a scalar if isscalarlike(other): # Now we would add this scalar to every element. raise NotImplementedError, 'adding a scalar to a sparse ' \ 'matrix is not supported' elif isspmatrix(other): if (other.shape != self.shape): raise ValueError, "inconsistent shapes" return self._binopt(other,'_minus_') elif isdense(other): # Convert this matrix to a dense matrix and subtract them return self.todense() - other else: raise NotImplementedError
def __add__(self,other): # First check if argument is a scalar if isscalarlike(other): # Now we would add this scalar to every element. raise NotImplementedError('adding a scalar to a CSC or CSR ' 'matrix is not supported') elif isspmatrix(other): if (other.shape != self.shape): raise ValueError("inconsistent shapes") return self._binopt(other,'_plus_') elif isdense(other): # Convert this matrix to a dense matrix and add them return self.todense() + other else: raise NotImplementedError