Skip to content

Commit 545942c

Browse files
committed
Make length(A.nzval)==nnz(A) #30662
1 parent 428eb0a commit 545942c

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

stdlib/SparseArrays/src/sparsematrix.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,12 @@ function _sparsesimilar(S::SparseMatrixCSC, ::Type{TvNew}, ::Type{TiNew}) where
328328
return SparseMatrixCSC(S.m, S.n, newcolptr, newrowval, similar(S.nzval, TvNew))
329329
end
330330
# parent methods for similar that preserves only storage space (for when new and old dims differ)
331-
_sparsesimilar(S::SparseMatrixCSC, ::Type{TvNew}, ::Type{TiNew}, dims::Dims{2}) where {TvNew,TiNew} =
332-
SparseMatrixCSC(dims..., fill(one(TiNew), last(dims)+1), similar(S.rowval, TiNew), similar(S.nzval, TvNew))
331+
function _sparsesimilar(S::SparseMatrixCSC, ::Type{TvNew}, ::Type{TiNew}, dims::Dims{2}) where {TvNew,TiNew}
332+
S1=spzeros(TvNew, TiNew, dims...)
333+
sizehint!(S1.rowval, min(length(S.rowval), length(S1)))
334+
sizehint!(S1.nzval, min(length(S.nzval), length(S1)))
335+
return S1
336+
end
333337
# parent method for similar that allocates an empty sparse vector (when new dims are single)
334338
_sparsesimilar(S::SparseMatrixCSC, ::Type{TvNew}, ::Type{TiNew}, dims::Dims{1}) where {TvNew,TiNew} =
335339
SparseVector(dims..., similar(S.rowval, TiNew, 0), similar(S.nzval, TvNew, 0))

0 commit comments

Comments
 (0)