[SciPy-dev] sparse matrix support status

Jonathan Guyer guyer at nist.gov
Wed Nov 23 13:26:11 CST 2005


On Nov 22, 2005, at 6:09 PM, Ed Schofield wrote:

> I have only one question for now.  Could you please explain the comment
>
> > dok_matrix.setdiag() appears to change the matrix shape if you're not
> > careful, rendering it pretty useless for building the matrices for 
> this
> > problem
>
> in more detail?  The code for setdiag() is:
>
>     def setdiag(self, values, k=0):
>         N = len(values)
>         for n in range(N):
>             self[n, n+k] = values[n]
>         return
>
> which grows the matrix only if it's currently smaller than len(values) 
> x len(values).  What's the problem this behaviour caused?  Would you 
> prefer to fix the size of a dok_matrix in advance and have a run-time 
> check on the len(values)?  Or was the problem with the second 
> argument?

Well, I guess I find the result of:

     >>> B = scipy.sparse.dok_matrix((3,3))
     >>> a = scipy.ones((3,))
     >>> B.setdiag(a,0)
     >>> print B.todense()
     [[ 1.  0.  0.]
      [ 0.  1.  0.]
      [ 0.  0.  1.]]
     >>> B.setdiag(a,1)
     >>> print B.todense()
     [[ 1.  1.  0.  0.]
      [ 0.  1.  1.  0.]
      [ 0.  0.  1.  1.]]

to be surprising.

I was expecting

     [[ 1.  1.  0.]
      [ 0.  1.  1.]
      [ 0.  0.  1.]]

This may not be a reasonable expectation, and I'm not sure where I came 
by it, since neither PySparse nor Numeric seems to support sticking 
anything into a diagonal, much less something that's too long.

Still, I think if I created an NxM matrix, then I probably want an NxM 
matrix.

-- 
Jonathan E. Guyer, PhD
Metallurgy Division
National Institute of Standards and Technology
<http://www.metallurgy.nist.gov/>




More information about the Scipy-dev mailing list