-
Notifications
You must be signed in to change notification settings - Fork 64
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.01647Metadata
Metadata
Assignees
Labels
No labels