[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