Thanks for the clarficiation Mauro, although it seems like right now Julia
is somewhere in between the two approaches according to that thread.

I guess I'll just have to write my own version of findn which assumes that
zeros have been purged, and if they haven't it's not that big of a deal in
my application.

Thanks again,
-z

On Thu, Feb 12, 2015 at 11:05 PM, Mauro <[email protected]> wrote:

> There was some discussion about this in
> https://github.com/JuliaLang/julia/issues/9928
>
> There are merits to both approaches: keeping zeros and purging them.
>
> On Fri, 2015-02-13 at 05:03, Zouhair Mahboubi <[email protected]>
> wrote:
> > I'm trying to find the column indices of non-zero elements of a given row
> > in a sparse matrix A
> >
> > I figured using findn would be a fast way to do that, but I was curious
> to
> > see how the implementation was done since all I cared about were the
> > columns for a given row and I thought I could have my own version that
> only
> > checked for a given row.
> >
> > But when I took a peek in
> >
> https://github.com/JuliaLang/julia/blob/master/base/sparse/sparsematrix.jl#L310
> > I was surprised to see this in findn (and findnz)
> >
> > S.nzval[k] != 0
> >
> >
> >
> > I would have expected nzval to always be != 0 by construction?
> >
> > Then I had a look at nnz and countnz, and I was again surprised to see
> that
> > they have slightly different implementations!
> > Especially given the help for the two functions (which makes sense since
> > one expects all stored elements in the sparse matrix to be non-zero)
> >
> > help?> nnz
> >> Base.nnz(A)
> >>    Returns the number of stored (filled) elements in a sparse matrix.
> >> help?> countnz
> >> Base.countnz(A)
> >>    Counts the number of nonzero values in array A (dense or sparse).
> >>    Note that this is not a constant-time operation. For sparse
> >>    matrices, one should usually use "nnz", which returns the number
> >>    of stored values.
> >
> >
> >
> > The only way I can see that happening, is if the user manually modifies
> > nzval? i.e.
> > A = spdiagm(ones(5));
> > println(nnz(A), countnz(A)) #prints 55
> > A[1,1] = 0
> > println(nnz(A), countnz(A)) #prints 44
> > A.nzval[1] = 0
> > println(nnz(A), countnz(A)) #prints 43
> >
> >
> > So few questions:
> >
> >
> >    - what is the fastet way to do what I was initially trying to
> >    accomplish: find the column indices and values of a given row in a
> sparse
> >    matrix A
> >    - why the checking of nzval?
> >    - is that because it's ok to change nzval manually? if not, why is
> nzval
> >       not "protected" ?
> >
> >
> >
> > Thanks,
> > -z
>
>

Reply via email to