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
>>
>>
>

Reply via email to