Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

[Mathematica] Explose a matrix

  1. Apr 19, 2010 #1
    [Mathematica] “Explose” a matrix

    Hi all,

    Sorry for the title :biggrin:
    Here is what I need to do : Transform this matrix (sorry, didn't find the LaTeX for matrices; pmatrix does not work)

    a b c 0 0 0 0 0 0
    d e f 0 0 0 0 0 0
    g h i 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0

    into


    a 0 0 b 0 0 c 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    d 0 0 e 0 0 f 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0
    g 0 0 h 0 0 i 0 0
    0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0

    if you see what I mean… I looked into ArrayPad[] but my pattern is more complicated than a simple padding…
    What's the best solution do that ?

    TIA
     
    Last edited: Apr 19, 2010
  2. jcsd
  3. Apr 19, 2010 #2

    tiny-tim

    User Avatar
    Science Advisor
    Homework Helper

    Hi guerom00! :smile:

    The second matrix is the same as the top left corner of the first matrix, but with lots of zero rows and columns inserted.

    So just permute the rows, and permute the columns. :smile:
     
  4. Apr 19, 2010 #3
    Re: [Mathematica] “Explose” a matrix

    Thanks for your response :smile:

    Yeah… How to permute 2 rows or 2 columns ?
    Nothing more “elegant” ?
     
  5. Apr 19, 2010 #4
    Re: [Mathematica] “Explose” a matrix

    I found this which is not bad :

    eam4ae.jpg

    :smile:
     
  6. Apr 19, 2010 #5
    Re: [Mathematica] “Explose” a matrix

    If

    A={{1,0,0},{0,0,0},{0,0,0}}
    B={{a,b,c},{d,e,f},{g,h,i}}

    then your first matrix is A x B and your second matrix is B x A, where "x" means tensor product. I'm not sure if new versions of Mathematica have the "tensor product" implemented, I already use an old code made by myself for that.
     
  7. Apr 20, 2010 #6

    Hepth

    User Avatar
    Gold Member

    Re: [Mathematica] “Explose” a matrix

    I know if you have two matrices you can do:

    A = {{a, b}, {c, d}}
    B = {{1, 0, 0}, {0, 0, 0}, {0, 0, 0}}
    Outer[Times, A, B] // ArrayFlatten


    I think by tensor product you mean outer product.


    EDIT: Changed SUM to Times (I had some for something else I was trying, TIMES is what you want.)
     
    Last edited: Apr 20, 2010
  8. Apr 20, 2010 #7
    Re: [Mathematica] “Explose” a matrix

    Yes, Outer[Times[]] works for tensor products of matrices.
    What I use does not need ArrayFlatten...
     
  9. Apr 20, 2010 #8
    Re: [Mathematica] “Explose” a matrix

    Thanks :smile:

    Is there a general thread for random questions on Mathematica ? I don't want to open a new thread each time…
    For instance, I'm looking for a pattern (to be used in a DeleteCases[]) which match a list of zeros of arbitrary length i.e. which match {0} or {0,0} or {0,0,0}, etc…
    Can someone help me ?

    TIA
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook