[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Chanegset]: Re: cat does not convert sparse matrices?
From: |
John W. Eaton |
Subject: |
[Chanegset]: Re: cat does not convert sparse matrices? |
Date: |
Wed, 17 Sep 2008 14:57:22 -0400 |
On 13-Sep-2008, David Bateman wrote:
| dbateman wrote:
| > In fact I think I see two bugs here
| >
| >
| > Francesco Potorti`-2 wrote:
| >> In Octave 3.0.1, I cannot catenate a full double matrix with a sparse
| >> logical matrix. Is this normal or a bug?
| >>
| >> octave> a=zeros(3,3,0);
| >> octave> b1=zeros(3,3);
| >> octave> b2=sparse(1,1,true,3,3);
| >> octave> whos a b1 b2
| >>
| >> *** local user variables:
| >>
| >> Prot Name Size Bytes Class
| >> ==== ==== ==== ===== =====
| >> rwd a 3x3x0 0 double
| >> rwd b1 3x3 72 double
| >> rwd b2 3x3 21 logical
| >>
| >> Total is 10 elements using 93 bytes
| >>
| >> octave> size(cat(3,a,b1))
| >> ans =
| >>
| >> 3 3 1
| >>
| >
| > Trailing singleton dimensions should be dropped, So I suspect there is a
| > function call missing in the cat function that should do this.
| >
|
| The attached patch addresses this, but
|
| >
| >
| >> octave> size(cat(3,a,b2))
| >> error: invalid conversion of NDArray to Matrix
| >> error: range error for insert
| >> error: evaluating argument list element number 1
| >>
| >
| > The sparse logical matrix should be promoted to a sparse matrix and the
| > concatenation allowed. Ok, I'll look at this wen I'm on a development
| > machine.
|
| It seems I missed the point you made by this one.. Sparse logical
| matrices are promoted to sparse double matrices before concatenation
| with another double matrix. The issue above is that a 3x3x0 is an
| NDArray and the Sparse matrix type only supports 2D arrays and so the
| conversion of the 3x3x0 array to a sparse matrices prior to the
| concatenation fails. It would be interesting to know what matlab does in
| this case, as I suspect it fails as well. If it doesn't then I suppose
| we need to special case for this.
|
| In fact we used to special case for all empty matrices in data.cc
| (do_cat) and just drop them from the concatenation. However, something
| like "cat(1,[],single([]))" must return a single precision empty matrix
| and so even empty matrices play their part in selecting the type of the
| returned matrix. So care would have to be taken if we did allow this not
| to cause other issues.
I applied this changeset.
Thanks,
jwe