如何初始化reduce并在Julia中使用累加器
它在没有初始值的情况下工作:如何初始化reduce并在Julia中使用累加器,julia,Julia,它在没有初始值的情况下工作: reduce(+,[2 3 4]) 尝试了多种方法来提供初始值-没有任何效果 reduce(+, [2 3 4], 1) reduce(+, 1, [2 3 4]) 似乎reduce只能与2参数运算符一起使用。通过接受当前值和累加器的自定义函数,应该使用什么函数来减少集合?类似下面的代码 reduce((accumulator, value) -> push!(accumulator, value^2), [1, 2, 3], []) # => [1,
reduce(+,[2 3 4])
尝试了多种方法来提供初始值-没有任何效果
reduce(+, [2 3 4], 1)
reduce(+, 1, [2 3 4])
似乎reduce只能与2参数运算符一起使用。通过接受当前值和累加器的自定义函数,应该使用什么函数来减少集合?类似下面的代码
reduce((accumulator, value) -> push!(accumulator, value^2), [1, 2, 3], [])
# => [1, 4, 9]
这个例子可以实现为map(x->x^2[1,2,3])
,但我想知道如何将它实现为带有累加器的reduce
julia版本1.1.1到
reduce
的init
参数是一个关键字参数:
julia> reduce(+, [2 3 4], init = 1)
10
julia> reduce((accumulator, value) -> push!(accumulator, value^2), [1, 2, 3], init = [])
3-element Array{Any,1}:
1
4
9
谢谢至于累加器-您知道吗?是否可以保证它始终是第一个参数,并且列表将从第一个到最后一个顺序缩减?如果您想保证缩减的左关联性,可以使用
foldl
。reduce
的关联性没有明确保证。请注意,[]
属于可能影响性能的Vector{Any}
类型。顺便说一句,为什么要使用累加器,而不是使用广播?@DNF,关于累加器,这似乎更像是一个“能做到吗?”的问题,而不是一个“应该做到吗?”的问题。OP甚至提到他可以用map
来代替给定的例子。好吧,我通常也会提到“应该这样做”,即使海报没有要求这样做。