Closed
Description
Please consider the code below where julia
is converting sparse matrix into dense one and doing map
on the top. Should we have map
defined only for non-zero elements in sparse matrix instead? Otherwise the slow down is an issue and one cannot apply effectively λ-calculus in this case!
julia> test = sprand(10^3,10^3,.01)
1000x1000 sparse matrix with 10144 Float64 entries:
[80 , 1] = 0.993039
[128 , 1] = 0.117601
[152 , 1] = 0.974119
[259 , 1] = 0.0362442
[289 , 1] = 0.621536
[371 , 1] = 0.653076
[631 , 1] = 0.131718
⋮
[439 , 1000] = 0.0621062
[538 , 1000] = 0.109039
[613 , 1000] = 0.212955
[620 , 1000] = 0.147798
[640 , 1000] = 0.479203
[702 , 1000] = 0.88309
[884 , 1000] = 0.780324
[892 , 1000] = 0.0164652
julia> f = v -> v+1
(anonymous function)
julia> @time map(f,test)
elapsed time: 14.162436633 seconds (89388704 bytes allocated)
1000x1000 sparse matrix with 1000000 Float64 entries:
[1 , 1] = 1.0
[2 , 1] = 1.0
[3 , 1] = 1.0
[4 , 1] = 1.0
[5 , 1] = 1.0
[6 , 1] = 1.0
[7 , 1] = 1.0
⋮
[993 , 1000] = 1.0
[994 , 1000] = 1.0
[995 , 1000] = 1.0
[996 , 1000] = 1.0
[997 , 1000] = 1.0
[998 , 1000] = 1.0
[999 , 1000] = 1.0
[1000, 1000] = 1.0
julia> @time (I,J,V)=findnz(test); sparse(I,J,map(f,V))
elapsed time: 0.000144994 seconds (243784 bytes allocated)
1000x1000 sparse matrix with 10144 Float64 entries:
[80 , 1] = 1.99304
[128 , 1] = 1.1176
[152 , 1] = 1.97412
[259 , 1] = 1.03624
[289 , 1] = 1.62154
[371 , 1] = 1.65308
[631 , 1] = 1.13172
⋮
[439 , 1000] = 1.06211
[538 , 1000] = 1.10904
[613 , 1000] = 1.21296
[620 , 1000] = 1.1478
[640 , 1000] = 1.4792
[702 , 1000] = 1.88309
[884 , 1000] = 1.78032
[892 , 1000] = 1.01647
Metadata
Metadata
Assignees
Labels
No labels