Re: Constructing matrix out of submatrices
- To: mathgroup at smc.vnet.net
- Subject: [mg113789] Re: Constructing matrix out of submatrices
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Sat, 13 Nov 2010 00:57:56 -0500 (EST)
On 11/12/10 at 5:26 AM, sschmitt at physi.uni-heidelberg.de (Sebastian
Schmitt) wrote:
>I would like to construct a matrix out of submatrices. I guess this
>is straight forward but somehow I couldn't find the correct way in
>the documentation. The example that follows is of course simplified.
>Please don't take shortcuts.
>I start with a zero matrix and a submatrix:
>matrix = ConstantArray[0, {3, 3}] submatrix = {{a, b}, {c, d}}
>I want to specificy the upper-left corner in the matrix where the
>submatrix should be placed. If the position is {1,1} the result
>should be:
>result = {{a, b, 0}, {c, d, 0}, {0, 0, 0}}
>If it is {1,2}:
>result = {{0, a, b}, {0, c, d}, {0, 0, 0}}
Here is a simple way to achieve your goal:
In[2]:= SparseArray[Band[{1, 1}] -> submatrix, {3, 3}] // Normal
Out[2]= {{a, b, 0}, {c, d, 0}, {0, 0, 0}}
In[3]:= SparseArray[Band[{1, 2}] -> submatrix, {3, 3}] // Normal
Out[3]= {{0, a, b}, {0, c, d}, {0, 0, 0}}
Here, I used Normal simply to show the goal was achieved. And
note, I am *constructing* the matrix from the submatrix rather
than *replacing* a portion of a larger matrix with the submatrix.
If I wanted the submatrix in the lower right corner of a 3 x 3
matrix, I could do it as follows:
In[4]:= PadLeft[#, 3] & /@ Join[{{0, 0, 0}}, submatrix]
Out[4]= {{0, 0, 0}, {0, a, b}, {0, c, d}}
or
In[5]:= ArrayFlatten[{{List /@ {0, 0, 0}, Join[{{0, 0}}, submatrix]}}]
Out[5]= {{0, 0, 0}, {0, a, b}, {0, c, d}}