If your sparse matrix does not have any stored zeros, which it should not unless you have placed them yourself - this should not matter. Why do you want to write your own findn?
-viral On Saturday, February 14, 2015 at 12:15:57 AM UTC+5:30, Zouhair Mahboubi wrote: > > 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 >> >> >
