"Matt J " <mattjacREMOVE@THISieee.spam> wrote in message news:firstname.lastname@example.org... > "Bruno Luong" <email@example.com> wrote in message > <firstname.lastname@example.org>... >> "Matt J" wrote in message <email@example.com>... >> >> >> Just like sum(), prod(), this result is no exception so to be >> documented separately. > ============== > > I can see the rational behind sum()=0and prod()=1. It's so that > > sum([A,],2)=sum(A,2)+sum() > prod([A,],2)=prod(A,2)*prod()
Why does SUM of an empty vector return 0 and PROD of an empty vector return 1? Convention.
Now  is a 0-by-0 empty matrix not an empty vector and so technically sum() should return a 1-by-0 empty instead of 0, but for that explanation I'm pretty sure you'd have to ask Cleve.
> I do not see the rationale behind the originally posted relationship, > though. Taking a slightly different example, I can see perhaps that > > ones(3,0)*ones(0,3) > > should end up being 3x3 because of the outer dimensions, but why should it > end up containing zeros.
The definition for matrix multiplication plus the MATLAB rule for SUM is why the result is all zeros.
If C = A*B, then:
1) size(A, 2) must equal size(B, 1) 2) C will be a matrix of size [size(A, 1), size(B, 2)] 3) C(r, c) is the sum of A(r, :) .* (B(:, c).'). This is the definition of matrix multiplication (slightly tweaked to use MATLAB notation and abide by the rules about compatible sizes for the .* operator.)
In this case size(A) is [3 0] and size(B) is [0 3] and condition 1 is satisfied. The resulting C is of size [3 3] and if we compute C(1, 1) we have:
>> A = zeros(3, 0); >> B = zeros(0, 3); >> % C(1, 1) = A(1, :) .* (B(:, 1).') >> A(1, :).*(B(:, 1).') ans = Empty matrix: 1-by-0
Since this is an empty vector, its SUM is zero.
>> sum(ans) ans = 0
This generalizes to the rest of the elements of C.