Re: Joining matrices
- To: mathgroup at smc.vnet.net
- Subject: [mg5758] Re: [mg5738] Joining matrices
- From: Peder Thusgaard Ruhoff <ptk at dit.ou.dk>
- Date: Tue, 14 Jan 1997 10:42:32 -0500
- Sender: owner-wri-mathgroup at wolfram.com
On Sat, 11 Jan 1997, Jean-Francois Alcover wrote:
> Date: Sat, 11 Jan 1997 14:29:22 -0500
> From: Jean-Francois Alcover <70763.411 at compuserve.com>
To: mathgroup at smc.vnet.net
> To: mathgroup at smc.vnet.net
> Subject: [mg5758] [mg5738] Joining matrices
>
> i have to join 2 or more matrices line by line
> for example : joinmat[{{{1,2},{3,4}},{{10,20},{30,40}}}]
> --> {{1,2,10,20},{3,4,30,40}}
>
> i have tried Transpose [Flatten[Transpose /@ ListOfMatrices,1]]
> but it seems rather slow
>
> can anyone help me with a faster solution ?
>
Dear Jean-Francois Alcover,
First I give an example of your function for joining matrices
-------------------------------------------------------------
Mathematica 2.2 for SGI
Copyright 1988-94 Wolfram Research, Inc.
-- Motif graphics initialized --
In[1]:= YourJoinMatrices[ms_] :=
Transpose [Flatten[Transpose /@ ms,1]]
In[2]:= listofmatrices = {{{1,2},{3,4}},{{10,20},{30,40}}};
In[3]:= MatrixForm /@ listofmatrices
Out[3]= {1 2, 10 20}
3 4 30 40
In[4]:= YourJoinMatrices[listofmatrices] // MatrixForm
Out[4]//MatrixForm= 1 2 10 20
3 4 30 40
-------------------------------------------------------------
In the following I give an alternative to your function
for joining matrices
-------------------------------------------------------------
In[5]:= JoinMatrices[ms_] := MapThread[Join, ms]
In[6]:= JoinMatrices[listofmatrices] // MatrixForm
Out[6]//MatrixForm= 1 2 10 20
3 4 30 40
-------------------------------------------------------------
Note that in the above Join might be replaced by
Flatten[{##}, 1]& if you prefer using Flatten instead of
Join.
Let us now compare the two definitions with respect to
execution time
-------------------------------------------------------------
In[7]:= listofmatrices = Array[#, {100, 100}]& /@ Array[f, 10];
In[8]:= Timing[Do[YourJoinMatrices[listofmatrices],{10}]]
Out[8]= {6.69 Second, Null}
In[9]:= Timing[Do[JoinMatrices[listofmatrices],{10}]]
Out[9]= {2.49 Second, Null}
-------------------------------------------------------------
Another test
-------------------------------------------------------------
In[10]:= listofmatrices = Table[Random[], {2000}, {3}, {3}];
In[11]:= Timing[Do[YourJoinMatrices[listofmatrices],{10}]]
Out[11]= {1.65 Second, Null}
In[12]:= Timing[Do[JoinMatrices[listofmatrices],{10}]]
Out[12]= {0.53 Second, Null}
-------------------------------------------------------------
Hope this helps.
Peder
-------------------------------------+--------------------------------------
Peder Thusgaard Ruhoff, Ph.D. | Phone: (+45) 65 57 35 43
Department of Information Technology | Fax: (+45) 66 15 76 97
Odense University |
Campusvej 55 | E-mail: ptk at dit.ou.dk
DK-5230 Odense M, DENMARK | URL: http://www.dit.ou.dk/~ptk/
-------------------------------------+--------------------------------------
"It is important for him who wants to discover not to confine himself to one
chapter of science, but to keep in touch with various others" - J. Hadamard