Skip to content

Commit f9c958a

Browse files
committed
fallback change for better performance
Update reduce.jl
1 parent d7b4a77 commit f9c958a

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

base/reduce.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,9 @@ mapreduce(f, op, a::Number) = mapreduce_first(f, op, a)
439439

440440
_mapreduce(f, op, ::IndexCartesian, A::AbstractArrayOrBroadcasted) = mapfoldl(f, op, A)
441441

442+
@inline _mapreduce(f, op, ::IndexCartesian, A::AbstractVector) =
443+
_mapreduce(f, op, IndexLinear(), A)
444+
442445
"""
443446
reduce(op, itr; [init])
444447

base/reducedim.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,14 @@ mapreduce(f, op, A::AbstractArrayOrBroadcasted; dims=:, init=_InitialValue()) =
316316
mapreduce(f, op, A::AbstractArrayOrBroadcasted...; kw...) =
317317
reduce(op, map(f, A...); kw...)
318318

319-
_mapreduce_dim(f, op, nt, A::AbstractArrayOrBroadcasted, ::Colon) =
319+
function _mapreduce_dim(f, op, nt, A::AbstractArrayOrBroadcasted, ::Colon)
320+
if op === min || op === max || op === _extrema_rf
321+
isempty(A) && return nt
322+
# _mapreduce might be better tuned for these reductions.
323+
return op(nt, _mapreduce(f, op, IndexStyle(A), A))
324+
end
320325
mapfoldl_impl(f, op, nt, A)
326+
end
321327

322328
_mapreduce_dim(f, op, ::_InitialValue, A::AbstractArrayOrBroadcasted, ::Colon) =
323329
_mapreduce(f, op, IndexStyle(A), A)

0 commit comments

Comments
 (0)