Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: matrix multiplication with zero dimensions
Replies: 11   Last Post: Jan 7, 2013 10:20 AM

 Messages: [ Previous | Next ]
 Steven Lord Posts: 18,038 Registered: 12/7/04
Re: matrix multiplication with zero dimensions
Posted: Jan 7, 2013 10:20 AM

"Matt J " <mattjacREMOVE@THISieee.spam> wrote in message
news:kcd527\$hou\$1@newscl01ah.mathworks.com...
> "Bruno Luong" <b.luong@fogale.findmycountry> wrote in message
> <kcd1lg\$6u4\$1@newscl01ah.mathworks.com>...

>> "Matt J" wrote in message <kcd0g0\$34t\$1@newscl01ah.mathworks.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.

http://en.wikipedia.org/wiki/Empty_sum
http://en.wikipedia.org/wiki/Empty_product

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.

--
Steve Lord
slord@mathworks.com
http://www.mathworks.com

Date Subject Author
1/6/13 Matt J
1/6/13 Bruno Luong
1/6/13 Matt J
1/6/13 Roger Stafford
1/6/13 Matt J
1/7/13 Matt J
1/7/13 Roger Stafford
1/7/13 James Tursa
1/7/13 Roger Stafford
1/7/13 Matt J
1/7/13 Bruno Luong
1/7/13 Steven Lord