This is a pretty simple question… The documentation for sum explicitly answers it.
Sum elements of an array over the given dimensions.
Examples
≡≡≡≡≡≡≡≡≡≡
julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1 2
3 4
julia> sum(A, 1)
1×2 Array{Int64,2}:
4 6
julia> sum(A, 2)
2×1 Array{Int64,2}:
3
7
I remember this has been changed since version 0.7, but TBH, I don’t know why this was decided? Why Julia sometimes choose verbosity over brevity when there is no real ambiguity. When I read sum(A,1) what else should I assume? Nothing other than summing array elements over the first dimension. For those who used Fortran, MATLAB, or even Python (Numpy) for years, making dims=1 a mandatory argument is really weird.
Brevity is crucial in dynamic languages with a REPL like Julia. Your’e trying to make the clear thing clearer, even if it’s not so clear to a beginner (someone who didn’t use a programming language before), they will learn it once and write it a million times in the REPL. It could’ve been made optional at most like in other languages. Also, why dims and not just dim as in Fortran? Only rare cases will include nD arrays, n > 2. Yes, clarity is a good thing, but also choosing a sensible default is very important especially for dynamic coding in the REPL.
PS: I can’t find the issue number for the discussion about this change, I appreciate if someone can provide it here.
I think it is this issue #25989. On the question on why dims and not dim, you have answered your own question I guess as sum(rand(3,3,3), dims = (1,2)) works just as well.
There actually was an ambiguity in the case of sum(x, y). It’s not clear if x is a callable function to be applied to the elements of y or if x is the data and y is the dimension. If you were to try to use a function-like-object there, it’d fail on 0.6 but work on 1.0.