Skip to content

Commit d8973f3

Browse files
committed
Rewrite spzeros and speye in terms of zeros and eye, respectively
1 parent 7a03fd9 commit d8973f3

File tree

2 files changed

+21
-21
lines changed

2 files changed

+21
-21
lines changed

base/sparse/sparsematrix.jl

+19-19
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ function sparse_IJ_sorted!{Ti<:Integer}(I::AbstractVector{Ti}, J::AbstractVector
330330

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

335335
cols = zeros(Ti, n+1)
336336
cols[1] = 1 # For cumsum purposes
@@ -968,25 +968,32 @@ sparse array will not contain any nonzero values. No storage will be allocated
968968
for nonzero values during construction. The type defaults to `Float64` if not
969969
specified.
970970
"""
971-
spzeros(m::Integer, n::Integer) = spzeros(Float64, m, n)
972-
spzeros(Tv::Type, m::Integer, n::Integer) = spzeros(Tv, Int, m, n)
973-
function spzeros(Tv::Type, Ti::Type, m::Integer, n::Integer)
971+
spzeros(m::Integer, n::Integer) = zeros(SparseMatrixCSC, m, n)
972+
spzeros(Tv::Type, m::Integer, n::Integer) = zeros(SparseMatrixCSC{Tv}, m, n)
973+
spzeros(Tv::Type, Ti::Type, m::Integer, n::Integer) = zeros(SparseMatrixCSC{Tv,Ti}, m, n)
974+
975+
function eye{Tv,Ti}(::Type{SparseMatrixCSC{Tv,Ti}}, m::Integer, n::Integer)
974976
((m < 0) || (n < 0)) && throw(ArgumentError("invalid Array dimensions"))
975-
SparseMatrixCSC(m, n, ones(Ti, n+1), Array{Ti}(0), Array{Tv}(0))
977+
x = min(m,n)
978+
rowval = Ti[1:x;]
979+
colptr = Ti[rowval; fill(Ti(x+1), n+1-x)]
980+
nzval = ones(Tv, x)
981+
return SparseMatrixCSC(m, n, colptr, rowval, nzval)
976982
end
983+
eye{Tv}(::Type{SparseMatrixCSC{Tv}}, m::Integer, n::Integer) = eye(SparseMatrixCSC{Tv,Int}, m, n)
984+
eye(::Type{SparseMatrixCSC}, m::Integer, n::Integer) = eye(SparseMatrixCSC{Float64,Int}, m, n)
977985

978-
979-
speye(n::Integer) = speye(Float64, n)
980-
speye(T::Type, n::Integer) = speye(T, n, n)
981-
speye(m::Integer, n::Integer) = speye(Float64, m, n)
986+
speye(n::Integer) = eye(SparseMatrixCSC, n)
987+
speye(T::Type, n::Integer) = eye(SparseMatrixCSC{T}, n, n)
988+
speye(m::Integer, n::Integer) = eye(SparseMatrixCSC, m, n)
982989

983990
"""
984991
speye(S)
985992
986993
Create a sparse identity matrix with the same structure as that of `S`.
987994
"""
988-
speye{T}(S::SparseMatrixCSC{T}) = speye(T, size(S, 1), size(S, 2))
989-
eye(S::SparseMatrixCSC) = speye(S)
995+
speye{T}(S::SparseMatrixCSC{T}) = eye(SparseMatrixCSC{T}, size(S, 1), size(S, 2))
996+
eye{T<:SparseMatrixCSC}(S::T) = eye(T, S)
990997

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

10071007
function one{T}(S::SparseMatrixCSC{T})
10081008
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)