Skip to content

Commit 6e73834

Browse files
committed
Rewrite spzeros and speye in terms of zeros and eye, respectively
1 parent 5f773d3 commit 6e73834

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

base/sparse/sparsematrix.jl

+20-20
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ function sparse_IJ_sorted!{Ti<:Integer}(I::AbstractVector{Ti}, J::AbstractVector
332332

333333
m = m < 0 ? 0 : m
334334
n = n < 0 ? 0 : n
335-
if isempty(V); return spzeros(eltype(V),Ti,m,n); end
335+
if isempty(V); return SparseMatrixCSC{eltype(V),Ti}(m,n); end
336336

337337
cols = zeros(Ti, n+1)
338338
cols[1] = 1 # For cumsum purposes
@@ -970,25 +970,32 @@ sparse array will not contain any nonzero values. No storage will be allocated
970970
for nonzero values during construction. The type defaults to `Float64` if not
971971
specified.
972972
"""
973-
spzeros(m::Integer, n::Integer) = spzeros(Float64, m, n)
974-
spzeros(Tv::Type, m::Integer, n::Integer) = spzeros(Tv, Int, m, n)
975-
function spzeros(Tv::Type, Ti::Type, m::Integer, n::Integer)
976-
((m < 0) || (n < 0)) && throw(ArgumentError("invalid Array dimensions"))
977-
SparseMatrixCSC(m, n, ones(Ti, n+1), Array{Ti}(0), Array{Tv}(0))
978-
end
973+
spzeros(m::Integer, n::Integer) = zeros(SparseMatrixCSC, m, n)
974+
spzeros(Tv::Type, m::Integer, n::Integer) = zeros(SparseMatrixCSC{Tv}, m, n)
975+
spzeros(Tv::Type, Ti::Type, m::Integer, n::Integer) = zeros(SparseMatrixCSC{Tv,Ti}, m, n)
979976

977+
function eye{Tv,Ti}(::Type{SparseMatrixCSC{Tv,Ti}}, m::Integer, n::Integer)
978+
check_array_size(m, n)
979+
x = min(m,n)
980+
rowval = collect(Ti, 1:x)
981+
colptr = Ti[rowval; fill(Ti(x+1), n+1-x)]
982+
nzval = ones(Tv, x)
983+
return SparseMatrixCSC(m, n, colptr, rowval, nzval)
984+
end
985+
eye{Tv}(::Type{SparseMatrixCSC{Tv}}, m::Integer, n::Integer) = eye(SparseMatrixCSC{Tv,Int}, m, n)
986+
eye(::Type{SparseMatrixCSC}, m::Integer, n::Integer) = eye(SparseMatrixCSC{Float64,Int}, m, n)
980987

981-
speye(n::Integer) = speye(Float64, n)
982-
speye(T::Type, n::Integer) = speye(T, n, n)
983-
speye(m::Integer, n::Integer) = speye(Float64, m, n)
988+
speye(n::Integer) = eye(SparseMatrixCSC, n)
989+
speye(T::Type, n::Integer) = eye(SparseMatrixCSC{T}, n, n)
990+
speye(m::Integer, n::Integer) = eye(SparseMatrixCSC, m, n)
984991

985992
"""
986993
speye(S)
987994
988995
Create a sparse identity matrix with the same structure as that of `S`.
989996
"""
990-
speye{T}(S::SparseMatrixCSC{T}) = speye(T, size(S, 1), size(S, 2))
991-
eye(S::SparseMatrixCSC) = speye(S)
997+
speye{T}(S::SparseMatrixCSC{T}) = eye(SparseMatrixCSC{T}, size(S, 1), size(S, 2))
998+
eye{T<:SparseMatrixCSC}(S::T) = eye(T, S)
992999

9931000
"""
9941001
speye([type,]m[,n])
@@ -997,14 +1004,7 @@ Create a sparse identity matrix of size `m x m`. When `n` is supplied,
9971004
create a sparse identity matrix of size `m x n`. The type defaults to `Float64`
9981005
if not specified.
9991006
"""
1000-
function speye(T::Type, m::Integer, n::Integer)
1001-
((m < 0) || (n < 0)) && throw(ArgumentError("invalid Array dimensions"))
1002-
x = min(m,n)
1003-
rowval = [1:x;]
1004-
colptr = [rowval; fill(Int(x+1), n+1-x)]
1005-
nzval = ones(T, x)
1006-
return SparseMatrixCSC(m, n, colptr, rowval, nzval)
1007-
end
1007+
speye(T::Type, m::Integer, n::Integer) = eye(SparseMatrixCSC{T}, m, n)
10081008

10091009
function one{T}(S::SparseMatrixCSC{T})
10101010
m,n = size(S)

base/sparse/sparsevector.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ similar{T}(x::SparseVector, ::Type{T}, D::Dims) = spzeros(T, D...)
4040

4141
### Construct empty sparse vector
4242

43-
spzeros(len::Integer) = spzeros(Float64, len)
44-
spzeros{T}(::Type{T}, len::Integer) = SparseVector(len, Int[], T[])
43+
spzeros(len::Integer) = zeros(SparseVector, len)
44+
spzeros{T}(::Type{T}, len::Integer) = zeros(SparseVector{T}, len)
4545

4646
# Construction of same structure, but with all ones
4747
spones{T}(x::SparseVector{T}) = SparseVector(x.n, copy(x.nzind), ones(T, length(x.nzval)))

0 commit comments

Comments
 (0)