Skip to content

Commit bb90b0a

Browse files
committedApr 5, 2016
Add conversions
1 parent 77f6b37 commit bb90b0a

File tree

7 files changed

+90
-3
lines changed

7 files changed

+90
-3
lines changed
 

‎benchmarks/conversion.jl

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
sm = sprand(scale, scale, 0.1)
2+
svm = svmrand(scale, scale, 0.1)
3+
arr = full(sprand(scale, scale, 0.1))
4+
5+
6+
println("Conversion to Full array from SparseMatrixCSC")
7+
for i in 1:num_iters
8+
@time full(sm);
9+
end
10+
11+
println("Conversion to Full array from SparseMatrixCD")
12+
for i in 1:num_iters
13+
@time full(svm);
14+
end
15+
16+
println("Conversion from Full array to SparseMatrixCSC")
17+
for i in 1:num_iters
18+
@time sparse(arr);
19+
end
20+
21+
println("Conversion from Full array to SparseMatrixCD")
22+
for i in 1:num_iters
23+
@time vsparse(arr);
24+
end
25+
26+
println("Conversion from SparseMatrixCSC to SparseMatrixCD")
27+
for i in 1:num_iters
28+
@time SparseMatrixCD(sm);
29+
end

‎benchmarks/run.jl

+4
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ println("-----------------------------------------------------------------------
2222
println("Running benchmarks for Grid Concatenation")
2323
include("hvcat.jl")
2424
println("----------------------------------------------------------------------------")
25+
26+
println("Running benchmarks for Matrix Conversions")
27+
include("conversion.jl")
28+
println("----------------------------------------------------------------------------")

‎src/conversion.jl

+25
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,30 @@
44

55
import Base: full
66

7+
export vsparse
8+
79
# Full
810
full(A::SparseMatrixCD) = hcat(map(full, A.svlist)...)
11+
12+
# Sparse
13+
function vsparse{Tv}(A::AbstractArray{Tv, 2})
14+
m, n = size(A)
15+
SparseMatrixCD{Tv, Int}(m, n, [sparse(A[:,c]) for c in 1 : size(A, 2)])
16+
end
17+
18+
# Convert from SparseMatrixCSC to SparseMatrixCD
19+
function SparseMatrixCD{Tv, Ti}(X::SparseMatrixCSC{Tv, Ti})
20+
m = X.m
21+
n = X.n
22+
svlist = Array{SparseVector{Tv, Ti}}(n)
23+
24+
colptrX = X.colptr
25+
nzvalX = X.nzval
26+
rowvalX = X.rowval
27+
28+
for col in 1 : n
29+
rr = colptrX[col] : (colptrX[col+1] - 1)
30+
svlist[col] = SparseVector{Tv, Ti}(m, rowvalX[rr], nzvalX[rr])
31+
end
32+
SparseMatrixCD{Tv, Ti}(m, n, svlist)
33+
end

‎src/definition.jl

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
# are distjoint.
55
###
66

7-
import Base: size, nnz, show, copy
7+
import Base: size, nnz, show, copy, ==, isequal
8+
89
export SparseMatrixCD
910

1011
type SparseMatrixCD{Tv, Ti}
@@ -41,3 +42,7 @@ end
4142

4243
# Copy
4344
copy{Tv, Ti}(x::SparseMatrixCD{Tv, Ti}) = SparseMatrixCD{Tv, Ti}(x.m, x.n, deepcopy(x.svlist))
45+
46+
# Equality
47+
(==)(x::SparseMatrixCD, y::SparseMatrixCD) = (x.m == y.m) && (x.n == y.n) && reduce(&, map(==, x.svlist, y.svlist))
48+
isequal(x::SparseMatrixCD, y::SparseMatrixCD) = isequal(x.m, y.m) && isequal(x.n, y.n) && reduce(&, map(isequal, x.svlist, y.svlist))

‎test/definition.jl

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
m = 5
2+
n = 10
3+
4+
svlist_int = SparseVector{Int, Int}[spzeros(Int, m) for i in 1 : n]
5+
svlist_float = SparseVector{Float64, Int}[spzeros(Float64, m) for i in 1 : n]
6+
7+
# Constructors
8+
svm_int = SparseMatrixCD{Int, Int}(m, n, svlist_int)
9+
svm_float = SparseMatrixCD{Float64, Int}(m, n, svlist_float)
10+
11+
# Size
12+
@test size(svm_int) == (m, n)
13+
@test size(svm_int, 1) == m
14+
@test size(svm_int, 2) == n
15+
16+
# NNZ
17+
@test nnz(svm_int) == mapreduce(nnz, +, 0, svlist_int)
18+
19+
# Copy
20+
@test copy(svm_int) == svm_int

‎test/getindex.jl

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
m = 5
2+
n = 10
3+
4+
svlist = SparseVector{Int, Int}[spzeros(Int, m) for i in 1 : n]
5+
svm = SparseMatrixCD{Int, Int}(m, n, svlist)

‎test/runtests.jl

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using SparseVectorMatrix
22
using Base.Test
33

4-
# write your own tests here
5-
@test 1 == 1
4+
include("definition.jl")

0 commit comments

Comments
 (0)
Please sign in to comment.