MATLAB: Does this code give an answer for each column seperately

for looplow autocorrelation of binary sequences

If you give an input matrix of c = ((rand10,20)>0.5)*2)-1
the code below will give an answer for each column seperately. Why does it do this? shouldn't this code just sum all answers and give a single number?
is it possible to create the same output with nested for loops?
function f = autocorrelation(a)% autocorrelation(a); a: column vector, {-1,+1}
n = length(a(:,1));
for (k=1:1:n-1) % (Start:step:end)
E(k,:) = (sum(a(1:n-k,:) .* (a(1+k:n,:)),1)).^2;
end
f = n^2 ./ (2 * sum(E));
end

Best Answer

By default, sum sums all the elements of each column together. You can change whether it sums by column, row, or other dimension, by specifying the dim argument as you've done inside your loop:
E(k, :) = sum(something, 1) .^ 2; %personally, if find the unnecessary brackets makes your expression harder to read.
1 is the default for matrix (for vector it's whichever dimension is not singleton), as clearly explained in the sum documentation.
In your f expression, where you don't specify a dimension, the default 1 is used and E is again summed by column.
If you want to sum all the elements of a matrix together, you first need to reshape that matrix into a single column of row:
f = 0.5 * n^2 / sum(E(:)); %E(:) reshape E into one column
%or
f = 0.5 * n^2 / sum(reshape(E, 1, [])); %explicit reshape
Note:
n = size(a, 1);
is much clearer and shorter than
n = length(a(:, 1));
and also won't give an error if a is empty.