[Scipy-tickets] [SciPy] #1859: Sparse matrix subtraction with another matrix seems to regard the other matrix as a scalar

SciPy Trac scipy-tickets@scipy....
Fri Mar 1 21:43:44 CST 2013

#1859: Sparse matrix subtraction with another matrix seems to regard the other
matrix as a scalar
 Reporter:  photon.engine           |       Owner:  jakevdp    
     Type:  defect                  |      Status:  new        
 Priority:  normal                  |   Milestone:  Unscheduled
Component:  scipy.sparse            |     Version:  0.10.1     
 Keywords:  sparse scalar subtract  |  

Comment(by warren.weckesser):

 When I use a CSR matrix in numpy.dot, I get the exception "ValueError:
 setting an array element with a sequence" in scipy version 0.11 (and in
 the current development version), but not in version 0.10.1.  So something
 changed since 0.10.1 that causes the exception.

 While the message isn't helpful, the crash is "good", because the computed
 array is not useful.  Notice the types of the results of numpy.dot in your
 output: they are 'object' arrays. The elements of the arrays are
 themselves instances of sparse matrices, when they should be the scalars
 that make up the dot product.  You get the error about scalars because the
 sparse matrices do not allow a nonzero scalar to be added to them--that
 destroys the sparseness, and it is almost always not what you intend to

 For example:
 In [28]: d = dia_matrix([[1,0],[2,3]])

 In [29]: d - 1
 NotImplementedError                       Traceback (most recent call
 <ipython-input-29-79e2276bf8fe> in <module>()
 ----> 1 d - 1

 /home/warren/anaconda/lib/python2.7/site-packages/scipy/sparse/base.pyc in
 __sub__(self, other)
     222     def __sub__(self, other):   # self - other
     223         #note: this can't be replaced by self + (-other) for
 unsigned types
 --> 224         return self.tocsr().__sub__(other)
     226     def __rsub__(self, other):  # other - self

 packages/scipy/sparse/compressed.pyc in __sub__(self, other)
     195                 return self.copy()
     196             else: # Now we would add this scalar to every element.
 --> 197                 raise NotImplementedError('adding a nonzero scalar
 to a '
     198                                           'sparse matrix is not
     199         elif isspmatrix(other):

 NotImplementedError: adding a nonzero scalar to a sparse matrix is not

 In your code, you have an array whose elements are sparse matrices, so
 when you try to subtract rhs from it, you are attempting to subtracts
 elements of rhs from the sparse matrices that were (incorrectly) creating
 by numpy.dot, and you get the 'NotImplementedError' exception.

Ticket URL: <http://projects.scipy.org/scipy/ticket/1859#comment:3>
SciPy <http://www.scipy.org>
SciPy is open-source software for mathematics, science, and engineering.

More information about the Scipy-tickets mailing list