Skip to content

Commit c15b9da

Browse files
committed
Define reducedim_initarray(A, region, ::UndefInitializer, ::Type) for easier initialization
1 parent 3ef866b commit c15b9da

File tree

4 files changed

+9
-2
lines changed

4 files changed

+9
-2
lines changed

base/reducedim.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ end
9191
# reducedim_initarray is called by
9292
reducedim_initarray(A::AbstractArrayOrBroadcasted, region, init, ::Type{R}) where {R} = fill!(similar(A,R,reduced_indices(A,region)), init)
9393
reducedim_initarray(A::AbstractArrayOrBroadcasted, region, init::T) where {T} = reducedim_initarray(A, region, init, T)
94-
94+
# TODO: extend this to minimum and maximum
95+
reducedim_initarray(A::AbstractArrayOrBroadcasted, region, ::UndefInitializer, ::Type{R}) where {R} = similar(A,R,reduced_indices(A,region))
9596
# TODO: better way to handle reducedim initialization
9697
#
9798
# The current scheme is basically following Steven G. Johnson's original implementation

stdlib/LinearAlgebra/src/special.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
# Diagonal/Bidiagonal/Tridiagonal/SymTridiagonal matrix. However, reducedim should
88
# yield a dense vector to increase performance.
99
Base.reducedim_initarray(A::Union{Diagonal,Bidiagonal,Tridiagonal,SymTridiagonal}, region, init, ::Type{R}) where {R} = fill(convert(R, init), Base.reduced_indices(A,region))
10-
10+
Base.reducedim_initarray(A::Union{Diagonal,Bidiagonal,Tridiagonal,SymTridiagonal}, region, ::UndefInitializer, ::Type{R}) where {R} =
11+
Array{R}(undef, Base.to_shape(Base.reduced_indices(A, region)))
1112

1213
# Interconversion between special matrix types
1314

stdlib/SparseArrays/src/sparsematrix.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1879,6 +1879,8 @@ end
18791879
function Base.reducedim_initarray(A::AbstractSparseMatrixCSC, region, v0, ::Type{R}) where {R}
18801880
fill!(Array{R}(undef, Base.to_shape(Base.reduced_indices(A, region))), v0)
18811881
end
1882+
Base.reducedim_initarray(A::AbstractSparseMatrixCSC, region, ::UndefInitializer, ::Type{R}) where {R} =
1883+
Array{R}(undef, Base.to_shape(Base.reduced_indices(A, region)))
18821884

18831885
# General mapreduce
18841886
function _mapreducezeros(f, op, ::Type{T}, nzeros::Integer, v0) where T

stdlib/SparseArrays/src/sparsevector.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2145,3 +2145,6 @@ function circshift!(O::SparseVector, X::SparseVector, (r,)::Base.DimsInteger{1})
21452145
end
21462146

21472147
circshift!(O::SparseVector, X::SparseVector, r::Real,) = circshift!(O, X, (Integer(r),))
2148+
2149+
Base.reducedim_initarray(A::SparseVector, region, ::UndefInitializer, ::Type{R}) where {R} =
2150+
Array{R}(undef, Base.to_shape(Base.reduced_indices(A, region)))

0 commit comments

Comments
 (0)