Skip to content

Commit cb84987

Browse files
committed
Make length(A.nzval)==nnz(A) #30662
1 parent 585feb0 commit cb84987

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

stdlib/SparseArrays/src/sparsematrix.jl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,13 @@ function _sparsesimilar(S::SparseMatrixCSC, ::Type{TvNew}, ::Type{TiNew}) where
330330
newrowval = copyto!(similar(S.rowval, TiNew), S.rowval)
331331
return SparseMatrixCSC(S.m, S.n, newcolptr, newrowval, similar(S.nzval, TvNew))
332332
end
333-
# parent methods for similar that preserves only storage space (for when new and old dims differ)
334-
_sparsesimilar(S::SparseMatrixCSC, ::Type{TvNew}, ::Type{TiNew}, dims::Dims{2}) where {TvNew,TiNew} =
335-
SparseMatrixCSC(dims..., fill(one(TiNew), last(dims)+1), similar(S.rowval, TiNew), similar(S.nzval, TvNew))
333+
# parent methods for similar that preserves only storage space allocation (for when new and old dims differ)
334+
function _sparsesimilar(S::SparseMatrixCSC, ::Type{TvNew}, ::Type{TiNew}, dims::Dims{2}) where {TvNew,TiNew}
335+
S1=spzeros(TvNew, TiNew, dims...)
336+
sizehint!(S1.rowval, min(length(S.rowval), length(S1)))
337+
sizehint!(S1.nzval, min(length(S.nzval), length(S1)))
338+
return S1
339+
end
336340
# parent method for similar that allocates an empty sparse vector (when new dims are single)
337341
_sparsesimilar(S::SparseMatrixCSC, ::Type{TvNew}, ::Type{TiNew}, dims::Dims{1}) where {TvNew,TiNew} =
338342
SparseVector(dims..., similar(S.rowval, TiNew, 0), similar(S.nzval, TvNew, 0))

stdlib/SparseArrays/test/sparse.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2188,22 +2188,22 @@ end
21882188
@test typeof(simA) == typeof(A)
21892189
@test size(simA) == (6,6)
21902190
@test simA.colptr == fill(1, 6+1)
2191-
@test length(simA.rowval) == length(A.rowval)
2192-
@test length(simA.nzval) == length(A.nzval)
2191+
@test length(simA.rowval) == 0
2192+
@test length(simA.nzval) == 0
21932193
# test similar with entry type and Dims{2} specification (preserves storage space only)
21942194
simA = similar(A, Float32, (6,6))
21952195
@test typeof(simA) == SparseMatrixCSC{Float32,eltype(A.colptr)}
21962196
@test size(simA) == (6,6)
21972197
@test simA.colptr == fill(1, 6+1)
2198-
@test length(simA.rowval) == length(A.rowval)
2199-
@test length(simA.nzval) == length(A.nzval)
2198+
@test length(simA.rowval) == 0
2199+
@test length(simA.nzval) == 0
22002200
# test similar with entry type, index type, and Dims{2} specification (preserves storage space only)
22012201
simA = similar(A, Float32, Int8, (6,6))
22022202
@test typeof(simA) == SparseMatrixCSC{Float32, Int8}
22032203
@test size(simA) == (6,6)
22042204
@test simA.colptr == fill(1, 6+1)
2205-
@test length(simA.rowval) == length(A.rowval)
2206-
@test length(simA.nzval) == length(A.nzval)
2205+
@test length(simA.rowval) == 0
2206+
@test length(simA.nzval) == 0
22072207
# test similar with Dims{1} specification (preserves nothing)
22082208
simA = similar(A, (6,))
22092209
@test typeof(simA) == SparseVector{eltype(A.nzval),eltype(A.colptr)}

0 commit comments

Comments
 (0)