The Math Forum



Search All of the Math Forum:

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


Math Forum » Discussions » Inactive » comp.soft-sys.math.mathematica

Topic: Flattening a hypermatrix into an ordinary matrix
Replies: 7   Last Post: Jun 2, 2012 5:51 AM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
Daniel Lichtblau

Posts: 1,761
Registered: 12/7/04
Re: Flattening a hypermatrix into an ordinary matrix
Posted: Jun 2, 2012 5:45 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

On Friday, June 1, 2012 4:21:40 AM UTC-5, car...@colorado.edu wrote:
> I have an n x n hypermatrix, the entries of which are m x m blocks.
> For example A below (m=3, n=2):
>
> A11={{B11,B12,B13},{B21,B22,B23},{B31,B32,B33}};
> A12={{C11,C12,C13},{C21,C22,C23},{C31,C32,C33}};
> A21={{D11,D12,D13},{D21,D22,D23},{D31,D32,D33}};
> A22={{E11,E12,E13},{E21,E22,E23},{E31,E32,E33}};
> A={{ A11,A12},{A21,A22}};
>
> I want to convert this to an ordinary n*m x n*m matrix.
> For the example I want A to become
>
> {{B11,B12,B13,C11,C12,C13},{B21,B22,B23,C21,C22,C23},
> {B31,B32,B33,C31,C32,C33},{D11,D12,D13,E11,E12,E13},
> {D21,D22,D23,E21,E22,E23},{D31,D32,D33,E31,E32,E33}}
>
> This can be easily done with C style loops as
>
> AA=Table[0,{m*n},{m*n}];
> For [i=1,i<=n,i++, For[j=1,j<=n,j++,
> For [k=1,k<=m,k++, For [l=1,l<=m,l++,
> AA[[m*(i-1)+k,m*(j-1)+l]]=A[[i,j,k,l]]
> ]]]];
>
> but is there a more elegant way using Flatten?
> (Flatten[A,1] doesnt do it.) It should work also for blocks
> of varying size for future use.


In[449]:= ArrayFlatten[A]

Out[449]= {{B11, B12, B13, C11, C12, C13}, {B21, B22, B23, C21, C22,
C23}, {B31, B32, B33, C31, C32, C33}, {D11, D12, D13, E11, E12,
E13}, {D21, D22, D23, E21, E22, E23}, {D31, D32, D33, E31, E32,
E33}}

(I was actually surprised to learn that ArrayFlatten did this "out of the box", so to speak. But then, I'm easily surprised.)

Daniel Lichtblau
Wolfram Research




Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© The Math Forum at NCTM 1994-2017. All Rights Reserved.