octave-maintainers
[Top][All Lists]

## Re: Diagonal v. sparse matrices [was Re: deprecated functions]

 From: John W. Eaton Subject: Re: Diagonal v. sparse matrices [was Re: deprecated functions] Date: Wed, 4 Mar 2009 16:17:13 -0500

```On  4-Mar-2009, Jaroslav Hajek wrote:

| Nope, I didn't break compatibility that much :) This is, in fact, the
| standard Matlab way to create a sparse diagonal matrix. It would be
| nice, however, to be able to write this as sparse(diag()) as well
| without losing efficiency. It seems Jason is working on something
| along that lines, so I'd leave it to him. Note that the proper
| constructors are already defined in liboctave.

What do you mean by "without losing efficiency"?  Does

a = diag (...);
sparse (a);

convert A to full first, then sparse?  If so, it seems that should be
fairly easy to fix.  In any case, I think the following change should
be made to spdiag.  This is much simpler than having to check
arguments in spdiag, and will be efficient if the "sparse (diag)"
constructor is fixed.  But the important thing is that for
compatibility with previous versions of Octave, spdiag returns a
sparse matrix, not a diag matrix.  Do you agree?

diff --git a/scripts/deprecated/spdiag.m b/scripts/deprecated/spdiag.m
--- a/scripts/deprecated/spdiag.m
+++ b/scripts/deprecated/spdiag.m
@@ -28,9 +28,9 @@
if (! warned)
warned = true;
warning ("Octave:deprecated-function",
-            "spdiag is obsolete and will be removed from a future version of
+            "spdiag is obsolete and will be removed from a future version of
endif

-  retval = diag (varargin{:});
+  retval = sparse (diag (varargin{:}));

endfunction

jwe

```